类成员
-
类变量(有些人称之为静态属性)
所有的当前这个类的对象,共享这个变量.
class kind: variable = parameter # 类变量 def __init__(self): pass
-
方法(实例方法)
类中正常的使用的方法.
-
类方法
该方法第一个参数是(cls)
在方法上写出 @classmethod,这个方法就是一个类方法.
@classmethod # 使用场景大多数,创建对象-并初始化.
类方法一般不用对象来调用,一般用类来调用.
class Demo: def __init__(self, number): self.number = number def delete(self): return f"已删除:{self.number}" @classmethod # 类方法 def default(cls): result = cls(1) return result finish = Demo.default() # 使用类进行调用 print(finish.delete())
-
静态方法
在方法上面添加 @staticmethod.
本质上是声明在类中的函数.
参数上和正常函数一样,无需 cls self.
使用场景:创建和初始化一个对象
class calculate:
@staticmethod
def count(x, y): # 类中的函数
return x + y
print(calcuate.count(0, 1))
使用:在方法上添加 @property. (此时该方法转变为属性方法)
使用场景:某一个属性,必须经过计算才能得到,我们需要把方法修改为一个属性.
注意:此时的方法名应该改为属性名.
class count:
def __init__(self, year):
self.year = year
@property # 取值
def age(self): # 参数只需要self. (属性名)
return 2023 - self.year
@age.setter # 向某个属性,设置值
def age(self, number):
self.year = 2023 - number
result = count(2005)
print(result.age) # 对象.属性名
result.age = 23
print(result.year)
python在每一个类中都内置了一大堆的方法,这些方法在特殊场景下被自动调用.
大多数的特殊方法和python的内置函数相关.
__len__() => len()
__iter__() => iter()
与计算相关
__add__() => 对象 + x
和属性相关
__getitem__() => 对象["x"]
__setitem__() => 对象["x"] = 值
初始化相关
__new__() => 创建对象时分配内存
__init__() => 初始化对象时自动调用
和上下文with相关
__enter__() 进入with的时候
__exit__() 离开with的时候
class demo:
def __abs__(self):
return print("绝对值")
def __len__(self):
return print("长度")
def __add__(self, other):
return print("添加" + other)
def __iter__(self):
return print("迭代器")
def __getitem__(self, item):
return print("创建字典")
def __setitem__(self, key, value):
return print("更改字典")
def __del__(self): # 程序执行完成会自动执行一次.
return print("完成删除")
def __enter__(self):
return print("进入with")
def __exit__(self, exc_type, exc_val, exc_tb):
return print("退出with")
# 创建对象的过程:__new__() => __init__()
def __new__(cls, *args, **kwargs): # 创建对象的地方.
print("创建对象")
return object.__new__(cls) # 分配内存,构建出一个对象.
def __init__(self):
print("init")
result = demo()
result.__abs__()
result.__len__()
result.__add__("成功")
result.__iter__()
result.__getitem__("one")
result["one"] = 1
# del result
with result as x:
pass