类的成员
1.字段
静态字段和普通字段
# class foo: # country = '中国' # 静态字段,属于类,代码加载的时候已经创建 # def __init__(self,name): # self.name = name #普通字段,属于对象 # 普通字段对象只能用对象访问 # 静态字段用类访问(尽量避免通过对象使用) hn = foo('河南') hb = foo('河北') print(foo.country) 内存中存储方式: 静态字段在内存中只保存一份 普通字段在每个对象中都需要保存一份 静态字段应用场景: 通过类创建对象时,如果每个对象都具有相同的字段,那么就使用静态字段
2.方法
1.普通方法: 至少一个self, 对象调用执行
2.静态方法: 任意参数, 类调用执行
3.类方法 : 至少一个cls,类调用执行
对于所有的方法,均属于类中,所以在内存中只保存一份
class Foo: def __init__(self,name): self.name = name #普通方法,对象调用执行,属于类 def num(self): print(self.name) #把不需要通过对象调用执行的普通方法做一些改动,变成静态方法(就是python中的普通函数),通过类直接调用执行 @staticmethod def show(): print('静态方法') #类方法,不需要传参数, @classmethod def clas(cls): a = cls('a') a.num() print(cls) Foo.show('这是') obj = Foo('这是普通方法') obj.num() Foo.clas()
3.属性
由属性的定义和调用要注意一下几点
定义时,在普通方法的基础上添加 @property 装饰器
定义时,属性仅有一个self参数
调用时,无需括号
方法:foo_obj.func()
属性:foo_obj.prop
#属性:具有方法的写作形式,具有字段的访问形式
class Foo1:
def __init__(self,num):
self.num = num
@property
def jisuan(self):
a1,a2 = divmod(self.num,10)
if a2 == 0:
return a1
else:
return a1 + 1
@jisuan.setter
def jisuan(self,value):
print(value)
@jisuan.deleter
def jisuan(self):
print('删除')
inp = int(input('输入:')) #输入一个
obj = Foo1(inp) #把值封装到对象
ret = obj.jisuan #通过字段的形式调用执行方法
print(ret) #打印返回值
obj.jisuan = 111 #更改
del obj.jisuan #删除