- # 封装中的属性
- # 一个人是否健康可以通过 bmi 值来判断
- class Person:
- def __init__(self,name,height,weight):
- self.name = name
- self.height = height
- self.weight = weight
- def bmi(self):
- return '{name} 的 bmi 值为 {date}'.format(name = self.name,date = round(self.weight / self.height ** 2,1))
- p1 = Person('Tian',1.70,60)
- print(p1.bmi())
- # 这里 bmi 是一个名词一个属性的概念, 这样调用是非常不符合规则的
- class Person:
- def __init__(self,name,height,weight):
- self.name = name
- self.height = height
- self.weight = weight
- # 加上装饰器之后 bmi 方法就成为了属性方法
- @property
- def bmi(self):
- return '{name} 的 bmi 值为 {date}'.format(name = self.name,date = round(self.weight / self.height ** 2,1))
- p1 = Person('Tian',1.70,60)
- print(p1.bmi)
- # 属性是可以更改的但是这里我们是一个伪装的属性所以无法更改, 对此 python 中还有一些其他的装饰器
- class Person:
- def __init__(self,name,height,weight):
- self.name = name
- self.height = height
- self.weight = weight
- self.__bmi = round(self.weight / self.height ** 2, 1)
- @property
- def bmi(self):
- return '{name} 的 bmi 值为 {date}'.format(name = self.name,date = self.__bmi)
- @bmi.setter
- def bmi(self,num):
- self.__bmi = num
- @bmi.deleter
- def bmi(self):
- del self.__bmi
- p1 = Person('Tian',1.70,60)
- p1.bmi = 10
- print(p1.bmi)
- del p1.bmi
- # 这样就可以修改了, 当然这种写法是不规范的没人会在构造函数做计算, 这里只是以此举例
- # 类方法
- class A:
- count = 20
- @classmethod
- def cal(cls,num):
- return num + cls.count
- # 这一类无需对象参与的的方法可以用类方法
- print(A.cal(15))
- # 父类要获取派生类也可以用类方法
- class B(A):
- count = 30
- print(B.cal(15))
- # 类中的静态方法
- class A:
- @staticmethod
- def func(user,pwd):
- if user == 'Tian' and pwd == 666:
- print('success')
- else:
- print('error')
- A.func('Tian',666)
- # 增加代码的复用性
- # 使代码块更加整洁明了
来源: http://www.bubuko.com/infodetail-3294612.html