类的成员描述符
在类中对成员属性进行相关操作而创建的一种方式
get: 获取属性的操作
set:修改或添加属性的操作
delete:删除属性的操作
使用property函数来使用描述符
property()
定义一个Person类,具有name,age两个属性,对于任意输入的姓名,我们希望都用大写保存,年龄用整数保存
class Person():
# 函数名称可以任意
def fget(self):
return self._name *2
def fset(self, name):
# 所有输入的姓名以大写保存
self._name = name.upper()
def fdel(self):
self._name = "NoName"
name = property(fget, fset, fdel, "操作" )# 对成员进行控制
p1 = Person()
p1.name = "xiao gege "
print(p1.name)
类的内置属性
__dict__: 以字典的方式显示类的成员组成
__doc__: 获取类的文档信息
__name__: 获取类的名称,用在模块,就获得模块的名称
__bases__:获取某个类的所有父类,以元组的形式显示
类的内置函数举例
1 class A(object):
2 '''
3 这是一个类的内置函数举例
4 '''
5 name = "aaa"
6 print("qqqq")
7 class B(A):
8 print("我是B 我爹是A")
9
10 print(A.__dict__)
11 print(A.__doc__)
12 print(A.__name__)
13 print(B.__bases__)
类的常用魔术方法
魔术方法就是不需要人为调用的方法,基本是在特定的时刻自动触发
特征:方法名前后有两个下划线
__init__
__new__: 对象实例化方法
__call__:对象当函数使用的时候触发
__str__: 当对象被当作字符串使用时触发
__repr__: 返回字符串,和__str__区别不大
__getattr__: 访问一个不存在的属性时触发
__setattr__: 队成员属性进行设置的时候触发 # 注意__setattr__中不能对属性进行赋值,否则产生死循环
1 class Q():
2
3 def __init__(self, name):
4 print("调用了__init__")
5 self.name = name
6 def __call__(self):
7 print("调用了__call__")
8 def __str__(self):
9 return "调用了__str__"
10 def __getattr__(self, item):
11 print("调用了__getattr__")
12 def __setattr__(self, name, value):
13 print("调用了__setattr__")
14 super().__setattr__(name,value) # 防止死循环,可以调用父类魔法函数
15
16 q = Q("xiaogege")
17 q() # 对象当函数使用,,触发__call__
18 print(q) # 对象当字符串
19 print(q.ppp)
20 q.name = "sha bi"
类的三种方法
实例方法: 需要实例化对象才能使用
静态方法: 不许哟啊实例化,通过类直接使用
类方法: 不需要实例化
class Person()
# 实例方法
def eat(self):
print(self)
print("eating......")
# 类方法
@classmethod
def play(cls):
print(cls)
print("playing.....")
# 静态方法
@staticmethod
def say():
print("say......")