首先定义一个类
class Person:
pass
增加类属性 -->可以通过实例调用 也可以通过类名调用
class Person:
hobby = "play basketball"
增加类的初始化方法 并初始化name 和 age两个值
class Person:
hobby = "play basketball"
def __init__(self, name, age):
self.name = name
self.age = age
此时可以创建类的实例方法 并且调用类属性
class Person:
hobby = "play basketball"
def __init__(self, name, age):
self.name = name
self.age = age
p1 = Person("张三", 20)
print(p1.hobby) # 结果是play basketball
增加普通的类方法 并且使用实例调用
class Person:
hobby = "play basketball"
def __init__(self, name, age):
self.name = name
self.age = age
def show(selef):
print(f"{self.name}今年{self.age}岁了")
p1 = Person("张三", 20)
print(p1.hobby) # 结果是play basketball
p1.show() # 结果是张三今年20岁了
增加静态方法 并使用类名调用 (实例也可以调用但是不推荐)
class Person:
hobby = "play basketball"
def __init__(self, name, age):
self.name = name
self.age = age
def show(selef):
print(f"{self.name}今年{self.age}岁了")
@staticmethod
def info():
print("我是一个静态方法")
p1 = Person("张三", 20)
print(p1.hobby) # 结果是play basketball
p1.show() # 结果是张三今年20岁了
Person.info() # 类名调用 结果是:我是一个静态方法
增加类方法 使用类名调用 (实例也可以调用但是不推荐)
class Person:
hobby = "play basketball"
def __init__(self, name, age):
self.name = name
self.age = age
def show(selef):
print(f"{self.name}今年{self.age}岁了")
@staticmethod
def info():
print("我是一个静态方法")
@classmethod
def info2(cls):
print(cls.__name__) # 获取类名
print(cls.__doc__) # 获取解释文档
p1 = Person("张三", 20)
print(p1.hobby) # 结果是play basketball
p1.show() # 结果是张三今年20岁了
Person.info() # 类名调用 结果是:我是一个静态方法
Person.info2() # 类名调用 结果是 Person None
动态更改类内属性 新建一个类方法 init_age
class Person:
hobby = "play basketball"
def __init__(self, name, age):
self.name = name
self.age = age
def show(selef):
print(f"{self.name}今年{self.age}岁了")
def init_age(self, _age):
self.age = _age
@staticmethod
def info():
print("我是一个静态方法")
@classmethod
def info2(cls):
print(cls.__name__) # 获取类名
print(cls.__doc__) # 获取解释文档
p1 = Person("张三", 20)
print(p1.hobby) # 结果是play basketball
p1.show() # 结果是张三今年20岁了
Person.info() # 类名调用 结果是:我是一个静态方法
Person.info2() # 类名调用 结果是 Person None
# 新增一个实例p2 调用age
p2 = Person("李四", 10)
print(p2.age) # 结果为10
p1.init_age(30) # 实例p1调用方法 修改age的值为30
print(p1.age) # 结果为30 新建实例的时候值为20
print(p2.age) # 结果依旧为10 说明实例之间是相互不影响的
动态的给类内增加实例方法
import types
class MyClass:
def __init__(self, value):
self.value = value
def custom_method(self):
return self.value * 2
# 创建一个实例
obj = MyClass(5)
# 使用MethodType将自定义方法绑定到实例上
bound_method = types.MethodType(custom_method, obj)
# 现在,bound_method就是obj实例的一个方法
result = bound_method()
print(result) # 输出: 10