类的动态、静态赋值、调用

首先定义一个类 

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值