实例方法、静态方法和类方法
三种方法在内存中都归属于类,区别在于调用方法不同
实例方法:由对象调用;至少一个self参数;执行实例方法时,自动将调用该方法的对象赋值给self
类方法:由类调用;至少有一个cls参数;执行类方法时,自动将调用该方法的类赋值给cls
静态方法:由类调用;无默认参数;
实例属性属于对象
类属性属于类
实例方法中self指向了实例对象
类方法可以通过函数调用和修改类属性,类方法中的cls指向了类对象
静态方法为了能干一些事情还不需要传参数,并归纳成一类
class Abc:
num = 11 #类属性
def __init__(self):
self.name = "hello" #实例属性
def a(self): #实例方法
return self.name
@classmethod #类方法
def b(cls):
return cls.num
@staticmethod #静态方法
def c():
return self.name
if __name__ == '__main__':
abc = Abc()
print(abc.num)
print(abc.b())
print(abc.a())
类属性
class People:
name = 'Tom' #公有的类属性
__age = 15 #私有的类属性
@classmethod
def a(cls):
return cls.__age
p = People()
print(p.name) #正确
print(People.name) #正确
print(p.__age) #错误,不能再类外通过实例对象访问私有的类属性
print(People.__age) #错误,不能再类外通过实例对象访问私有的类属性
print(p.a()) #正确,通过类方法拿到私有类属性
实例属性
class People:
address = '山东' #类属性
def __init__(self):
self.name = 'xiaowang' #实例属性
self.age = 20 #实例属性
p = People()
p.age = 12 #实例属性 通过类修改实例属性
print(p.address) #正确
print(p.name) #正确
print(p.age) #正确
print(People.address) #正确
print(People.name) #错误
print(People.age) #错误
通过实例(对象)去修改类属性
class People(object):
country = 'china' #类属性
print(People.country)
p = People()
print(p.country)
p.country = 'japan'
print(p.country) #实例属性会屏蔽掉通欧明的类属性
print(People.country)
del p.country #删除实例属性
print(p.country)
网友评论