1、类的格式

类:所有类名要求首字母大写,多个单词使用驼峰式命名,所有类都默认继承Object

class 类名[(父类)]:属性:特征方法:动作

注: python与其他语言不一样,可以动态的加载对象的属性和方法。

2、类属性 & 对象属性

  1. 类属性

    #定义类和属性
    class Student:# 类属性name = 'Jason'age = 20object1 = Student() #使用类,创建对象
    object1.age = 21 #对象属性
    print(object1.name)
    print(Student.name)
    
  2. 对象属性

    class Phone:def __init__(self,brand,price,date): #初始的,初始化,类似构造函数'''动态的给self空间中添加了两个属性:brand,price'''self.brand = brandself.price = priceself.date = date
    object1 = Phone('huawei','4999','2019/9')
    print(object1.brand)
    
  3. 类属性与对象属性的区别:
    类属性可以直接通过类名访问。__init__方法中的self属性是对象所特有的,此时访问的是实例化对象的属性。对象属性是先找__init__中的,没找到才到类属性中找。

3、普通方法 & 类方法 & 静态方法

  1. 普通方法

    格式:
    def 方法名(self[,参数1,参数2]):pass#以下call就为普通方法
    class Phone:brand = 'xiaomi'price = 2399type = '米8'#魔术方法之一:称作魔术方法 __名字__()def __init__(self,brand,price,date): #初始的,初始化,类似构造函数'''动态的给self空间中添加了两个属性:brand,price'''self.brand = brandself.price = pricedef call(self): #self类似于java中的thisprint('正在打电话...',self.note)
    
  2. 类方法
    特点:
    1、定义需要依赖装饰器classmethod
    2、类方法中参数不是一个对象,而是类。
    print(cls) # <class ‘_main_.Dog’>
    3、类方法中只可以使用类属性
    4、类方法中可否使用普通方法? 不能
    类方法作用: 因为只能访问类属性和类方法,所以可以在对象创建之前,完成一些动作(功能)。

    class Dog:__age = 18 # __age类属性的私有,只能在类中访问!!!def __init__(self,nickname):self.nickname = nickname#这个方法必须依赖对象才能存在的def run(self):print('{}在院子里跑来跑去!'.format(self.nickname))def  eat(self):print('吃饭。。。')self.run() #类中方法的调用,需要通过self.方法名()#类方法,只要有类存在方法就存在@classmethod  #底层封装好的,不用深究。def test(cls):  #cls classprint(cls)   #<class '__main__.Dog'># print(cls.nickname)d = Dog('大黄')
    Dog.test() #直接上类
    
  3. 静态方法
    特点: 使用类似于类方法
    1.需要装饰器@staticmethod
    2.静态方法是无需传递参数<cls,self>
    3.也只能访问类的属性和方法,对象的是无法访问的
    4.加载时机同类方法

    class Dog:__age = 18 # __age类属性的私有,只能在类中访问!!!def __init__(self,nickname):self.nickname = nickname#这个方法必须依赖对象才能存在的def run(self):print('{}在院子里跑来跑去!'.format(self.nickname))def  eat(self):print('吃饭。。。')self.run() #类中方法的调用,需要通过self.方法名()#类方法,只要有类存在方法就存在@classmethod  #底层封装好的,不用深究。def test(cls):  #cls classprint(cls)   #<class '__main__.Dog'># print(cls.nickname)@staticmethoddef test1():print('--静态方法--')print(Dog.__age)
    d = Dog('大黄')
    Dog.test1() #调用静态方法也直接上类
    
  4. 总结
    类方法静态方法
    不同:
    1.装饰器不同
    2.类方法是有参数的,静态方法没有参数
    相同:
    1.只能访问类的属性和方法,对象的是无法访问的
    2.都可以通过类名使用访问
    3.都可以在创建对象之前使用,因为是不依赖对象

    普通方法两者区别
    1.没有装饰器
    2.普通方法永远是要依赖对象,因为每个普通方法都有一个self
    3.只有创建了对象才可以调用普通方法,否则无法使用。

4、魔术方法(自动执行的方法)

可以参考:Python中的魔术方法详解

  1. __init__:初始化对象,类似构造函数
    触发时机:初始化对象时触发(不是实例化触发,但是和实例化在一个操作中)

  2. __new__: 实例化的魔术方法
    触发时机:在实例化时触发

  3. __call__:对象调用方法
    #触发时机:将对象当成函数使用的时候,会默认调用此函数中内存

  4. __del__:解除对地址引用,类似析构函数
    触发时机:del 标识符,解除对地址的引用,或者程序执行完(回收所有在本次执行过程中使用到的空间)。

  5. __str__: 提供对象信息
    触发时机:打印对象名 自动触发去调用__str__里面的内容
    注意: 一定要在__str__方法中添加return,return后面内容就是打印对象看到内容

class Person:def __init__(self,name): #对象把地址给__init__print('__init__')self.name = namedef __new__(cls, *args, **kwargs):  #先执行这个,申请内存,先开辟空间print('__new__')return  object.__new__(cls)  #抛出地址,给对象#__call__:把对象当成函数来调用,必须重写__call__方法def __call__(self,name):print('------>call',name)def __del__(self):  #一般不写哦,知道就行啦#删除地址引用的时候就会触发print('--------del----------')def __str__(self):return self.name
  1. 总结
    __init__ 构造方法,创建空间之后调用的第一个方法。
    __str__ 作用:返回人工添加对象信息。
    了解:
    __new__ 作用: 开辟空间。
    __del__ 作用: 没有指针引用的时候会调用,99%都不需要重写 类似析构函数。
    __call__ 作用: 想不想将对象当成函数用。

  2. 补充
    怎么获取一个地址被引用了多少次?

    import sys  #首先导入sys模块
    print(sys.getrefcount('地址'))
    

5、实例

实例1:

class Phone:brand = 'xiaomi'price = 2399type = '米8'#魔术方法之一:称作魔术方法 __名字__()def __init__(self,brand,price,date): #初始的,初始化,类似构造函数'''动态的给self空间中添加了两个属性:brand,price'''self.brand = brandself.price = pricedef call(self): #self类似于java中的thisprint('正在打电话...',self.note)object1 = Phone('voio','2999','2019')
  1. 找有没有一块空间是Phone
  2. 利用Phone类,向内存申请一块Phone一样的空间
  3. 去Phone中找有没有__init__,如果没有则执行,将开辟内存给对象名object1
  4. 如果有__init__,则会进入init方法执行里面动作。再将内存地址赋值给对象object1

实例2:

class Cat:type = '猫'def __init__(self,nickname,age,color):#以下都是对象属性self.nickname = nicknameself.age = ageself.color = color# 动作,方法def eat(self,food):print('{}喜欢吃{}'.format(self.nickname,food))def catch_mouse(self,color,weight):print('{},抓了一只{}kg的,{}的大老鼠!'.format(self.nickname,weight,color))def sleep(self,hour):if hour <5:print('乖乖,继续睡叭!')else:print('赶快起床出去抓老鼠!')#创建对象,对内存来说就是开辟一块空间
cat1 = Cat('花花',2,'灰色')
cat1.eat('fish')

6、大总结

方法:普通方法 ----》  重点def 方法名(self,[参数]):方法体对象.方法()方法之间的调用:class  A :def a(self):passdef b(self):#调用a方法self.a()类方法:@classmethoddef 方法名(cls,[参数]):pass类名.方法名()对象.方法名()静态方法:@staticmethoddef 方法名(cls,[参数]):pass类名.方法名()对象.方法名()魔术方法:自动执行方法

Python中类和对象的属性 方法相关推荐

  1. 混淆概念详细解析:Python中类、对象、方法、函数和属性的区别和理解

    混淆概念详细解析:Python中类.对象.方法.函数和属性的区别和理解 前言 一.类.对象.方法.函数和属性的区别和理解 二.一个类的简单案例和对各种概念的理解 三.总结 欢迎学习交流! 邮箱: z- ...

  2. python与正则表达式(part8)--compile对象及match对象的属性方法

    文章目录 compile对象属性(compile函数生成的正则表达式对象的属性) flags参数扩展 举个例子 match对象的属性方法 1.属性变量 2.属性方法 举个例子 compile对象属性( ...

  3. 学习笔记之——Python中类和对象的理解

    学习笔记之--Python中类和对象的理解 面向对象的含义和特性 类 Python中类的定义.结构.创建 Python类的定义 Python类的结构 类的创建 类的属性 类的方法 对象 对象的创建 参 ...

  4. python静态方法,类方法,属性方法,实例方法

    DAY 3. 静态方法,类方法,属性方法,实例方法 有四种方法,实例方法,类方法,静态方法,属性方法 实例方法 实例方法的第一个参数是self,他会指向类的实例化对象,只能被对象调用,如 class ...

  5. python 修改模板对象的属性_django小技巧之html模板中调用对象属性或对象的方法...

    环境:依赖最初test2数据库 python3版本 多python版本环境 进入,python3虚拟环境,新建项目test4: ]# cd py3/django-test1/ ]# django-ad ...

  6. Python 中类的继承:属性初始化、类型判断、多态、多继承和对象信息的获取

    属性初始化: 一定要用super(Teacher, self).__init__(name, gender)去初始化父类,否则,继承自 Person 的 Teacher 将没有 name 和 gend ...

  7. Python 动态获取对象的属性和方法(内含inspect)

    首先通过一个例子来看一下本文中可能用到的对象和相关概念. #coding:utf-8 import sysdef foo():passclass Cat(object):def __init__(se ...

  8. python 中类与对象

    python中类.属性.方法用现实中的一个例子来解释,例如汽车类,方法:能跑,属性:白色的.加长的.python中的属性就是在python中定义的成员变量,方法就是在python中定义的函数. pyt ...

  9. python中类和对象的内容_python中的类和对象

    摘要:本文主要介绍了python中的类和对象的基础内容.由于在c++中对类和对象已经有了较为深刻的认识,所以此部分就是主要熟悉一下创建方法和使用方法. 1.类.对象的创建和简单使用 主要观察创建类的方 ...

  10. Python中类、对象与self详解

    先介绍一下python中的类与对象/实例.然后详细说明self.说明:对象等同实例,本文称呼不一致时请自行统一 [一]类与对象/实例 1.类 (1)类由名称.属性.方法三部分组成 (2)类是抽象模板, ...

最新文章

  1. 改善代码设计 —— 总结篇(Summary)
  2. 在Python中,如何确定对象是否可迭代?
  3. sql字符串分隔函数
  4. 配置MGR启动第一个节点时start group_replication一直报ERROR 3092 (HY000):The server is not configured properly
  5. 贝叶斯原理及其推断简介
  6. 用matlab的ADC和DAC过程,谈谈我理解的ADC和DAC
  7. 错误:cc1: error: unrecognized command line option “-m32”
  8. 自定义MVC框架之工具类-图像处理类
  9. 简约的网络字节序处理
  10. could not load hsdis-mips64el:hsdis-mips64el library not loadable PrintAssembly is disabled
  11. 本科生毕业论文查重率多少合适?
  12. android分区调整大小写,小米2 32G开发版 无损分区调整
  13. 零点起算法44求最小值C语言,【算法链表面试题】面试问题:C语言实现“关… - 看准网...
  14. SLAM之回环检测与优化
  15. [医疗信息化][DICOM教程]HL7 V3 Standard-概述-HL7 V3 Standard - A High Level Overview
  16. Avaya PBX sip trunk对接第三方sip server传递UUI的方法
  17. 花了5000元改了一个带触摸板的小红点键盘
  18. vsCode在window电脑中安装FiraCode字体(好看字体)
  19. 74161功能表_计数器74ls161工作原理(分频电路、真值表、逻辑功能)
  20. 2018.8.21 广州科目三展茂东满分飘技巧

热门文章

  1. UF超滤膜:探讨UF超滤膜组件对进水水质的要求
  2. 一年后 php_php 一年后,一月后,一日后,一年前,一月后,一周后
  3. 基于java的ssm框架健身房管理系统
  4. 斐波那契数列之python(5种方法)
  5. 【你哥电力电子】 THE BUCK-BOOST 升降压斩波电路2
  6. 最新!编程将纳入中小学课程
  7. 设计模式学与练-开篇(学习中)
  8. 如何使用myEclipse来生成hibernate所需文件
  9. Java第二天上课笔记
  10. HDU1021---Fibonacci Again HDU(134)