| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- 1、类
- 属性
- 类的属性
- - 数据属性
- - 函数属性
- obj.__dict__
- 实例属性
- - 数据属性
- obj.__dict__
- 所有的数据属性可以动态改变
- 2、方法
- - 绑定方法
- 参数,必须定一个位置参数, 通常叫 self
- 类的实例调用时称为绑定方法
- 那个实例调用时 self 就是这个实例
- - 类方法
- 首先需要使用 classmethod 装饰器装饰的函数
- 也必须有一个位置参数,通常 cls
- 调用
- - 一般是使用 类.方法名
- 也可以使用 类的实例名.方法名
- 无论谁调用, cls都是一个类对象
- - 静态方法
- 需要使用 staticmethod 装饰器
- 此时就是一个普通函数
- 调用
- 使用
- - 类名.方法名
- - 实例名.方法名
- 3、继承
- class A():
- pass
-
- class B(A):
- pass
- A 称为父类(超类)
- B 称为子类
- ###================================================###
-
- 一:属性:
- 尽量把需要用户传入的属性作为实例属性,而把同类都一样的属性作为类属性。实例属性在每创造一个实例时都会初始化一遍,不同的实例的实例属性可能不同,不同实例的类属性都相同。从而减少内存。
- 1:实例属性:
- 最好在__init__(self,...)中初始化
- 内部调用时都需要加上self.
- 外部调用时用instancename.propertyname
- 2:类属性:
- 在__init__()外初始化
- 在内部用classname.类属性名调用
- 外部既可以用classname.类属性名又可以用instancename.类属性名来调用
- 3:私有属性:
- 1):单下划线_开头:只是告诉别人这是私有属性,外部依然可以访问更改
- 2):双下划线__开头:外部不可通过instancename.propertyname来访问或者更改
- 实际将其转化为了_classname__propertyname
- 二:方法
- 1:普通类方法:
- def fun_name(self,...):
- pass
- 外部用实例调用
- 2:静态方法:@staticmethod
- 不能访问实例属性!!! 参数不能传入self!!!
- 与类相关但是不依赖类与实例的方法!!
- 3:类方法:@classmethod
- 不能访问实例属性!!! 参数必须传入cls!!!
- 必须传入cls参数(即代表了此类对象-----区别------self代表实例对象),并且用此来调用类属性:cls.类属性名
- *静态方法与类方法都可以通过类或者实例来调用。其两个的特点都是不能够调用实例属性
|