0 前置知识
1 面向对象类的基本使用
- 属性:类属性、实例对象属性
- 方法:实例方法、类方法、静态方法
class A(object):
# 类属性
class_a = 20
def __init__(self):
# 实例对象属性
self.a = 10
# 实例方法
def a_print(self):
print("a_print")
# 类方法
@classmethod
def class_print(cls):
print('class_print')
# 静态方法
@staticmethod
def static_print():
print("static_print")
#------调用属性------
# 类调用类属性,不能调用实例对象属性
print('类调用类属性:%d'%A.class_a)
# 使用实例化对象调用类属性 & 实例属性
print('实例化对象调用类属性 & 实例属性:%d & %d'%(A().class_a,A().a))
#------调用方法------
# 使用类调用 类 方法
A.class_print()
# 使用类调用 静态 方法
A.static_print()
# 调用 实例 方法的两种方式:实例化,调用实例方法
A.a_print(A())
A().a_print()
类调用类属性:20
实例化对象调用类属性 & 实例属性:20 & 10
class_print
static_print
a_print
a_print
2 继承、属性赋值
class A(object):
class_a = 20
def __init__(self):
self.a = 10
def a_print(self):
print("a_print")
@classmethod
def class_print(cls):
print('class_print')
@staticmethod
def static_print():
print("static_print")
# 继承:A是B的父类
class B(A):
def b_print(self):
print("b_print")
# 属性赋值的形式
class C(object):
obj_a = A() #属性赋值/实例化
def c_print(self):
print('c_print')
# 实例化B类,可以用到父类A的a_print()和B的b_print()
B().b_print()
B().a_print()
# 属性赋值/实例化后的C.obj_a,可以调用A中的方法
C.obj_a.a_print()
b_print
a_print
a_print
3 super 和 @property の 使用
super作用:super() 函数是用于调用父类(超类)的一个方法。
super使用场景:重写父类方法,在父类方法的基础上,新增一些业务逻辑
使用@property装饰器可以直接通过方法名来访问方法,不需要再在后面使用"()"
class A(object):
def a_print(self):
print("it's from class A.a_print")
class B(A):
def b_print(self):
# 调用父类方法
super().a_print()
print("it’s from class B.b_print[add_data]")
@property
def data(self):
print("data")
# 实例化B类,并使用继承了父类A の a_print()方法の b_print()
B().b_print()
# 直接以调用属性的形式调用方法
B().data
it's from class A.a_print
it’s from class B.b_print[add_data]
data
Reference:https://blog.csdn.net/weixin_40687614/article/details/108699221