一、内容回顾
成员
class Person:
def __init__(self, name, num, gender, birthday):
# 成员变量
self.name = name
self.num = num
self.gender = gender
self.birthday = birthday
# 对象来访问(成员方法)(实例方法)
def eat(self,name):
print("%s吃东西"%self.name)
### 成员:在类定义的变量和方法都被称为成员
变量:
1、成员变量(实例变量)、字段
2、类变量(静态变量)
方法:
1、成员(实例)方法,加了self的,调用的时候,必须用对象去访问
2、类方法 @classmethod def clsMethod(cls) ## 类方法:第一个参数传递的是类名
3、静态方法,当你的方法不需要传递当前类的对象。语法规则:在方法上面加@staticmethod
------>>>>>说一说,静态方法、类方法和实例方法的区别
属性:
用方法描述我们的属性信息
@property ## 表示当前方法是一个属性, 方法的返回就是这个属性的值,不用加括号(就是属性),直接访问属性,实际上访问
的是xxx()方法,返回值就是属性值 ## 方法只能有一个参数,就是self,并且要return
注意:
1、@property 改变一个方法称为属性
2、这个方法只能有一个参数,self
3、必须要有return
私有:
只能在自己类中执行,__方法,__属性,__
二、类与类之间关系
1、依赖关系(紧密程度最低)(大象装冰箱)
最轻的一种关系
在方法中引入领一个类的对象
2、关联关系
类与类之间的关系是比较紧密的。
3、组合关系
4、聚合关系
5、继承关系、实现关系
self :当前执行这个方法的对象
三、类名和对象是否可以作为key
# 对可哈希,内部是否哈希算法 __hash__
1、 class Foo(object): ## 所有的类都会默认继承obj
def __init__(self):
pass
def func(self):
pass
__hash__ = None
dic = {}
dic[Foo] = '12344' ## 类名是可哈希的
dic[Foo()] = 'hello' ## TypeError : unhashable type:'Foo' 类中是否包含__hash__
print(dic)
## list dic set 内部中__hash__ = None , 是不可哈希的
eg:
self 到底是谁?
## self 当前访问xx方法的那个对象
四、类中的特殊成员
什么是特殊成员?__init__() 就是一个特殊的成员,带双下划先的那一坨,这些方法
在特殊的场景的时候会被自动的执行。
1、类名() 将 执行 __init__() 构造方法
2、对象() == >> obj() 会默认执行 __call__ ## python 特有
3、对象[] ==>> obj[xxxx ] 从对象中获取数据 默认执行 __getitem__()
4、对象[] = xxx == >> 默认执行 _setitem__()
5、del obj[key] 默认执行_-delitem__()
6、打印对象的时候 会自动执行 __str__()
7、with 对象 as 变量 会自动执行 __enter__ 和 __exit__()
__new__():
1、加载类
2、开辟内存空间
(开辟方法)
def __new__(cls,*args,**kwargs):
return object.__new__(cls) ## 这句话才是创建对象,其他都是初始化对象
3、初始化这一块内存__init __
五、issubclass 、 type 、isinstance
issubclass 判断xxxx类是否是xxx类的子类
type 给出xxx的数据类型
isinstance 判断对象是否是XXX家族体系的内容,往上找
区分方法和函数:
在外面定义的函数一定是函数
实例方法: 对象.方法 方法 类名.方法 函数
静态方法: 都是函数 @staticmethod
类方法: 都是方法 @classmethod
## 引入两个模块
from types impor