Python 面向对象2

1.字段:

  静态字段:类字段,用类来访问,在代码加载的时候已经创建了。

  普通字段:对象字段,用对象来访问,在对象创建的时候才生成。

2.方法:

  所有的方法都是属于类

  普通方法:至少一个self,由对象来访问

  静态方法:@staticmethod修饰,任意参数,由类来调用执行,跟对象没有关系

  类方法:@classmethod修饰,最少有一个参数cls,类方法比静态方法多了一个功能,就是把类名自动传递给cls

3.属性:

  一个不伦不类的东西,具有方法的写法形式,具有字段的访问形式

class Pager:

    def __init__(self,total_pager):
        self.total_pager = total_pager

    def div_page(self):
        a1,a2 = divmod(self.total_pager,10)
        if a2 == 0:
            return a1
        else:
            return a1+1


p = Pager(102)
ret = p.div_page()
print (ret)

执行结果:11

  假如我们要做一个分页,通过传统的方式,那么写成上面的样子,如果改成property的方式,那么调用的时候,执行的时候不需要加括号

class Pager:

    def __init__(self,total_pager):
        self.total_pager = total_pager

    @property
    def div_page(self):
        a1,a2 = divmod(self.total_pager,10)
        if a2 == 0:
            return a1
        else:
            return a1+1


p = Pager(102)
ret = p.div_page
print (ret)

对于字段而言,我们可以通过p.total_pager来实现获取,也可以通过p.total_pager=103来设置,那么属性如何也通过这种方式来设置呢?

class Pager:

    def __init__(self,total_pager):
        self.total_pager = total_pager

    @property
    def div_page(self):
        a1,a2 = divmod(self.total_pager,10)
        if a2 == 0:
            return a1
        else:
            return a1+1

    @div_page.setter
    def div_page(self,value):
        pass
#
p = Pager(102)
# ret = p.div_page
# print (ret)
print (p.total_pager)
p.total_pager = 103
print (p.total_pager)
p.div_page = 100

执行的时候不会报没有attribute的错误

同样的,对于字段我们可以执行删除操作,那么对于属性方法而言呢?

class Pager:

    def __init__(self,total_pager):
        self.total_pager = total_pager

    @property
    def div_page(self):
        a1,a2 = divmod(self.total_pager,10)
        if a2 == 0:
            return a1
        else:
            return a1+1

    @div_page.setter
    def div_page(self,value):
        pass
    
    @div_page.deleter
    def div_page(self):
        pass

    def show(self):
        print ("HELLO")

p = Pager(102)
print (p.total_pager)
p.total_pager = 103
del p.total_pager
del p.div_page
p.show()
原文地址:https://www.cnblogs.com/python-study/p/5735128.html