类中方法的定义与函数基本相同,有以下几点区别:
- (1)类方法的第一个参数必须是self,而且不能省略
- (2)方法的调用是使用“实例对象.方法”的形式进行的
- (3)类方法属于类,函数是独立的
实例对象可以调用公有的实例方法、类方法和静态方法;
类对象只能调用类方法和静态方法,要调用公有的实例方法,必须为self参数显式传递实例对象名,即以实例对象为参数
例如:
类方法
- 需要用装饰器@classmethod来声明,第一个参数必须是类对象,
- 一般以cls作为第一个参数,在调用方法时不需要为该参数传递值
- 可以通过类名和对象名调用,但不能直接访问属于实例对象的属性,只能访问属于类的属性
静态方法
- 需要通过装饰器@staticmethod来进行修饰,可以没有参数
- 但如果要在静态方法中引用类属性,则必须通过类
- 可以通过类名和对象名调用,但不能直接访问属于实例对象的属性,只能访问属于类的属性
property函数
- 装饰器 即∶在方法上应用装饰器
- 类属性 即:在类中定义值为property对象的类属性
作为装饰器
class Goods:
@property
def price(self):
print('@property')
@price.setter
def price(self, value):
print('@price.setter')
@price.deleter
def price(self):
print('@price.deleter')
b = Goods()
b.price
b.price = 200
del b.price
-----------》
@property
@price.setter
@price.deleter
类属性
class Goods:
def a_price(self):
print('@property')
def b_price(self, value):
print('@price.setter')
def c_price(self):
print('@price.deleter')
BAR =property(a_price,b_price,c_price,'description....')
b = Goods()
b.BAR #自动调用第一个方法 a_price
b.BAR = 200 #自动调用第二个方法 b_price
del b.BAR #自动调用第三个方法 c_price
ca=Goods.BAR.__doc__
print(ca) #自动获取第四个参数 'description....