面向对象基础(四)

# 封装中的属性
# 一个人是否健康可以通过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)

# 增加代码的复用性
# 使代码块更加整洁明了

 

posted on 2019-11-19 11:56  素心~  阅读(116)  评论(0编辑  收藏  举报

导航