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