1. 类和对象
1. 定义类
class 类名:
执行语句...
零到多个类变量...
零到多个方法...
类的定义
- 类名:由一个或多个有意义的单词连缀而成的,每个单词首字母大写,其他字母小写,单词与单词之间不要使用任何分隔符
- 类变量属于类本身,用于定义该类本身所包含的状态数据
- 实例变量属于该类的对象,用于定义对象所包含的状态数据
- 方法则用于定义该类的对象的行为或功能实现
- init构造方法,del析构方法
2. 对象的产生和使用
对象的产生对象的使用
3. 实例方法
对于在类体中定义的实例方法,Python会自动绑定方法中的第一个参数(通常建议将该参数命名为self),第一个参数总是指向调用该方法的对象。在构造方法中,self参数(第一个参数)代表该构造方法正在初始化的对象。
class Dog:
def run(self):
print('这是run方法')
def jump(self):
self.run()
print('这是jump方法')
2. 方法
方法是类或对象的行为特征的抽象
1. 类也能调用实例方法
# 全局变量的定义
def foo():
print('全局变量的foo方法')
bar = 200
class Brid:
# 定义Bird空间的foo函数
def foo():
print('Bird空间的foo方法')
def walk(self):
print(self,'正在走')
bar = 200
# 调用
foo()
print(bar)
Brid.foo()
print(Brid.bar)
# Brid.walk() 报错
Brid.walk('abc')
2. 类方法与静态方法
@classmethod 装饰的是类方法,类方法的第一个参数(建议用cls参数)
@staticmethod 装饰的是静态方法
类方法与静态方法
3. @函数装饰器
示例当程序使用“@函数”(比如函数A)装饰另一个函数(比如函数B),实际上完成以下两步:
- 将被装饰的函数(函数B)作为参数传给@符号引用的函数(函数A)
- 将函数B替换(装饰)成第1步返回的结果
可以看出被装饰的函数,不再是原来的函数,而是替换成一个新的东西。
示例2上面定义了一个装饰器函数foo,执行完返回的不是普通值,而是bar函数,这意味着被@foo修饰的函数最终都会被替换成bar函数。上面程序使用@foo装饰my_test,因此程序会执行foo(my_test),并将my_test替换成foo()函数的返回值:bar函数。程序会两次调用my_test()函数,其实是调用bar()函数
4. 类命名空间
3. 成员变量
1. 类变量和实例变量
类变量 实例变量2. 使用property函数定义属性
propetty(fegt=None,fset=None,fdel=None,doc=None)
4. 隐藏和封装
python并不能真正的支持封装
只要将Python类的成员命名为以双下划线开头的,python就会将他们隐藏起来
5. 类的继承
1. 单继承
class SubClass(superClass1, superClass2, ...):
# 类定义部分
类的继承
2. 多继承
虽然在语法上明确支持多继承,但通产推荐,如果不是很有必要,尽量不要使用多继承,避免很多麻烦
当一个子类有很多个直接父类时,该子类会继承得到所有父类的方法。如果多个父类有同名的方法,排在前面的父类中的方法会”遮蔽“在后面的父类中的同名方法。
3. 重写父类的方法
重写父类的方法4. 使用未绑定方法调用被重写的方法
使用未绑定方法调用被重写的方法5. 使用super函数调用父类的构造方法
排在前面的父类的同名方法会遮蔽后面父类的同名方法
没有使用super函数 使用super函数
网友评论