一 @property
在不破坏类封装的前提下,让开发者依旧使用 对象.属性
的方法操作类中的属性
基本使用格式
属性名 = property(fget=None, fset=None, fdel=None, doc=None)
- fget:用于获取属性的方法
- fset:用于设置属性的方法
- fdel:用于删除属性的方法
- doc:属性的说明文档字符串
class Test:
def __init__(self, name, age):
self.__name = name
self.__age = age
def setName(self, name):
self.__name = name
def getName(self):
return self.__name
def delName(self):
self.__name = "xxx"
def setAge(self, age):
self.__age = age
def getAge(self):
return self.__age
name = property(getName, setName, delName, '我是说明文档')
age = property(getAge, setAge)
tt = Test('大番茄', 14)
print(tt.age)
tt.age = "24"
print(tt.age)
del tt.age
# print(tt.age)
@property
是个装饰器,相当于getter装饰器 ;可以使用 @property 来创建只读属性
class Test:
def __init__(self, name):
self.__name = name
@property
def name(self):
return self.__name
@name.setter
def name(self, name):
self.__name = name
@name.deleter
def name(self):
print("删除 __name")
tt = Test("大番茄")
# 打印属性值
print(tt.name)
# 修改属性
tt.name = "老干妈辣椒酱"
# 删除属性
del tt.name
二 @classmethod
用来创建一个类的预处理的实例
class DateDeal:
def __init__(self, y=0, m=0, d=0):
self.d = d
self.m = m
self.y = y
@classmethod
def deal_date(cls, string_date):
y, m, d = map(int, string_date.split('-'))
date1 = cls(y, m, d)
# 返回的是一个初始化后的lei
return date1 # 这个是对象
def date(self):
print(self.y)
print(self.m)
print(self.d)
dd = DateDeal.deal_date("2022-05-08")
dd.date()
三 @staticmethod
在类中定义一个函数,这个函数的形参列表没有self,且需要使用@staticmethod
装饰,称为静态方法,可以使用类名.函数名 或 实例对象.函数名 调用。
class A:
@staticmethod
def say():
print('我是个好人')
a = A()
a.say()
A.say()
## 输出结果
# 我是个好人
# 我是个好人