python-面向对象2
字段、方法、属性
1 #静态字段与普通字段 2 class Foo: 3 #静态字段 4 contry = '中国' 5 def __init__(self,name): 6 #普通字段 7 self.name = name 8 9 #普通字段的调用需要对象调用,需要实例化对象 10 hn = Foo('河南') 11 print(hn.name) 12 >>>河南 13 hb = Foo('河北') 14 >>>河北 15 #静态字段由类调用,不用实例化对象,python中静态字段 对象与类都能访问类中的静态字段,一般情况下不适用对象调用静态字段
16 print(Foo.contry) 17 >>>中国
#补充静态字段,代码加载的时候已经创建,普通字段实例化对象时调用
#构造方法,静态方法,普通方法,类方法 class Foo: #构造方法 def __init__(self,name): self.name = name # 普通方法,由对象去调用,属于类 def show(self): print(self.name) #静态方法,属于类,不能被对象调用,用类调用 # 静态方法的使用,类中的方法不调用对象时,使用静态方法,与函数相同 @staticmethod def f1(args): print(args) @classmethod def f2(cls): ret = cls('alex') ret.show() #普通方法使用对象效用 obj = Foo('liguangxu') obj.show() >>>liguangxu #静态方法使用类调用 Foo.f1('abc') >>>abc #类方法使用类调用,默认把类名当参数传入,(必须有)可在类中初始化对象。 Foo.f2() >>>alex
1 class Foo: 2 def __init__(self,all_count): 3 self.all_count = all_count 4 5 #属性,拥有字段功能的方法 6 @property 7 def all_pager(self): 8 a1,a2 = divmod(self.all_count,10) 9 if a2 == 0: 10 return a1 11 else: 12 return a1+1 13 #属性的修改 14 @all_pager.setter 15 def all_pager(self,value): 16 print(value) 17 #属性的删除 18 @all_pager.deleter 19 def all_pager(self): 20 print('del all_pager') 21 22 p = Foo(101) 23 #方法的调用需要用对象.方法名() 24 #属性的调用要用对象.属性 25 print(p.all_pager) 26 #>>>11 27 #字段拥有修改的功能,属性也有 28 #属性的修改 29 p.all_pager = 111 30 #>>>111 31 del p.all_pager 32 #>>>def all_pager
1 #属性的另一种表现形式 2 class Pager: 3 def __init__(self, all_count): 4 self.all_count = all_count 5 6 def f1(self): 7 return 123 8 9 def f2(self): 10 pass 11 def f3(self): 12 pass 13 14 foo = property(fget = f1,fset = f2,fdel =f3) 15 16 p = Pager(101) 17 18 result =p.foo#调用属性,默认执行第一个参数的函数 19 print(result) 20 21 p.foo = 'alex'#修改属性值,默认执行第二个参数fset 22 23 del p.foo#删除属性,指定第三个参数的函数