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()