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#删除属性,指定第三个参数的函数
原文地址:https://www.cnblogs.com/liguangxu/p/5625103.html