Python 自定义Class常用语法
提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:第一章 Python Class常用语法
文章目录
前言
提示:这里可以添加本文要记录的大概内容:
_func、__func、func_、__func__含义。
一、下划线函数/变量
1.1、_func,仅供内部使用
# test.py
class example():
def __init__(self):
pass
def _func1():
return "func1"
可调用范围:类内、py文件内实例属性、外部py文件实例属性不可调用。
1.2、__func,仅供类内部使用
# test.py
class example():
def __init__(self):
pass
def __func2():
return "func2"
可调用范围:类内、py文件内实例属性不可调用、外部py文件实例属性不可调用。
1.3、func_,区分特殊字符
# test.py
class example():
def __init__(self):
pass
def class_():
return "function class_"
可调用范围:类内、py文件内实例属性、外部py文件实例属性,避免命名冲突。
1.4、__func__,类中特殊方法
# test.py
class example():
def __init__(self):
pass
二、super(XXX, self).__init__()
对继承自父类的属性进行初始化,并且用父类的初始化方法初始化继承的属性。
三、装饰器
3.1、@classmethod与@staticmethod
两个都是装饰器,前者定义类方法、后者定义静态方法。
@classmethod:
第一个参数cls
代表类本身,实例名.函数名()
的方式调用,可以访问类属性/函数;
@staticmethod:
无入参要求,函数与类/示例无关,内部无法访问类属性、方法。
普通方法:
第一个参数self
代表实例本身,实例名.函数名()
的方式调用,可以访问实例属性/函数;
class example():
# 类属性
a = 5
def __init__(self):
# 实例属性
self.a = 100
@classmethod
def func1(cls, param:int):
return cls.a + param
@staticmethod
def func2(param:int):
return param
def func3(self, param:int):
return self.a + param
if __name__=="__main__":
E = example()
E.func1(2) # 类方法返回:7
E.func2(2) # 静态返回:2
example().func2(2) # 静态返回:2
example.func2(2) # 静态返回:2
E.func3(2) # 普通方法返回:102
3.2、@property 与 @*.setter
@property:
表示可读,使得像访问属性一样访问类 / 实例的函数,如:当类存在私有变量,仅支持在实例初始化时赋值并且支持读取变量值,可以考虑这种方法。
@setter:
表示可写,使用位置必须在@property
之后,
@deleter:
表示可删除,使用位置必须在@property
之后,
class example():
def __init__(self, a:int):
self._a = a
@property
def a(self):
return self._a
@a.setter
def a(self, a:int):
self._a = a
@a.deleter
def a(self):
del self._a
if __name__=="__main__":
E = example(a=50)
print(E.a) # 类方法返回:50
E.a = 100
print(E.a) # 静态返回:100
del E.a # 删除E的_a属性
print(E.a) # 报错 “AttributeError: 'example' object has no attribute '_a'”
总结
提示:这里对文章进行总结: