68-python-内置函数( property )

# property
# 将方法伪装成一个属性
from math import pi
class Circle:
    def __init__(self,r):
        self.r = r
    @property
    def perimter(self):
        return 2 * pi *self.r
    @property
    def area(self):
        return self.r ** 2 * pi

c = Circle(3)
print(c.area)       # 正常调用为:print(c.arte())
print(c.perimter)   # 正常调用为:print(c.perimter())

# @名字.setter # 可以修改对象的属性
class Person:
    def __init__(self,name):
        self.__name = name
    @property
    def get_name(self):
        return self.__name
    @get_name.setter
    def get_name(self,newname):
        self.__name = newname

p = Person('q')
print(p.get_name)       # 打印结果:q
p.get_name = 'new_q'
print(p.get_name)       # 打印结果:new_q
# 修改:
class Goods:
    discount = 0.5
    def __init__(self,name,price):
        self.name = name
        self.__price = price
    @property
    def price(self):
        return self.__price * self.discount

g = Goods('app',5)
print(g.price)      # 打印方法:2.5

# 删除:
class Person:
    def __init__(self,name):
        self.__name = name
    @property
    def name(self):
        return self.__name
    @name.deleter       # 只是和 del 互相关联,del 会找到这个方法,并执行方法中的代码
    def name(self):
        del self.__name
    # @name.setter
    # def name(self,new_name):
    #     self.__name = new_name

p = Person('q')
print(p.name)
del p.name      # 这里只是调用了一个叫 del 的方法 ,方法中将私有属性 name 删掉
print(p.name)   # 报错
# p.name = 'new_name'
# print(p.name)
posted @ 2018-11-06 19:59  _Q  阅读(104)  评论(0)    收藏  举报