静态属性 @property 既可以访问类属性,也可以访问实例属性
class Phone:
def __init__(self,brand,color, version):
self.brand = brand
self.color = color
self.version = version
# 相当于把函数属性编变成了数据属性
# 这样调用方法由 实例.call() 变为 实例.call
@property
def call(self):
# print("正在用%s牌%s手机打电话"% (self.brand,self.color))
return "正在用%s牌%s手机打电话"% (self.brand,self.color)
p = Phone("apple", "白色", "iphone x")
v = p.call # p.call调用方式来看,我们不会知道call是数据属性还是函数属性,这样方法就被隐藏起来了。
print(p.color, v)
类方法 @classmethod 可以访问类属性
class Phone:
function = "打电话";
def __init__(self,brand,color, version):
self.brand = brand
self.color = color
self.version = version
# 相当于把函数属性编变成了数据属性
# 这样调用方法由 实例.call() 变为 实例.call
@property
def call(self):
# print("正在用%s牌%s手机打电话"% (self.brand,self.color))
return "正在用%s牌%s手机打电话"% (self.brand,self.color)
# classmethod可以将方法定义为类方法,可以直接通过 类名.方法名直接调用
@classmethod
def func(cls):
print(cls) # 传递进来的参数其实是一个类
print("---->",cls.function)
p = Phone("apple", "白色", "iphone x")
# 可以直接通过 类名.方法名直接调用
Phone.func()
# 可以不用通过 传递实例对象,调用func(p)了
# Phone.func(p)
静态方法 @staticmethod 不能使用类变量和实例变量
class Phone:
function = "打电话";
def __init__(self,brand,color, version):
self.brand = brand
self.color = color
self.version = version
# 相当于把函数属性编变成了数据属性
# 这样调用方法由 实例.call() 变为 实例.call
@property
def call(self):
# print("正在用%s牌%s手机打电话"% (self.brand,self.color))
return "正在用%s牌%s手机打电话"% (self.brand,self.color)
# classmethod可以将方法定义为类方法,可以直接通过 类名.方法名直接调用
@classmethod
def func(cls):
print(cls) # 传递进来的参数其实是一个类
print("---->",cls.function)
@staticmethod # 静态方法只是名义上的归属类管理,不能使用类变量和实例变量,只是类的工具包
def see_movie(aa,bb):
print("%s %s 正在拿手机看电影"%(aa, bb));
Phone.see_movie("小明","小米")
p = Phone("apple", "白色", "iphone x")
p.see_movie("小明","小米")