类属性和实例属性

在写python的类时,总是分不清什么时候方法之间可以共用某些属性,什么情况下不能。写该博客记录一下,欢迎大家补充改正。

类的方法之间可以共用类的属性和类的实例属性。

类的实例属性:

实例属性是附加到类的实例上的属性。

实例属性写在构造函数中:
class MyClass:
    def __init__(self, value):
        self.instance_attr = value

self就表示MyClass这个类本身,self.instance_atter就表示instance_atter是MyClass这个类的实例的属性。

class MyClass:
    def __init__(self, value):
        self.instance_attr = value
    
    def add(self):
        print(f'和是{self.instance_attr+self.instance_attr}')
    
    def product(self):
        print(f"乘积是{self.instance_attr*self.instance_attr}")

myclass=MyClass(5)
myclass.add()   #10
myclass.product()  #25

在创建类的实例myclass时,要将构造函数中需要的参数传入,add方法和product方法都可以调用类的实例的属性正常运行。

实例写在某一个方法中:
class A:
    def b(self):
        self.d = D()  # 在方法b中实例化一个D类对象
        print("Method b called")

    def c(self):
        # 在方法c中可以访问并使用d,因为它是实例属性
        print("Method c called")
        self.d.do_something()  # 调用D类对象的方法

class D:
    def do_something(self):
        print("Method do_something in class D called")

# 创建A类的实例
a = A()
a.b()  # 调用方法b,实例化D类对象
a.c()  # 调用方法c,可以访问和使用之前实例化的D类对象

该代码中,在类A的方法b中,实例化了一个类对象D,并且使用self.d=D(),将d作为一个实例赋给了self(也就是类A),所以现在d是A的类的实例属性,那么在c方法中就可以调用该类的实例的属性,但是这是在类A调用了b方法的前提下才能将D实例化,否则该类的实例的属性不存在,c方法也就无法调用了。

类的实例的属性是通过实例化类对象之后传参进行赋值的,所以类的实例的属性的值取决于每个实例,通常是不一样的。

类的属性:
class MyClass:
    class_attr = "I am a class attribute"

# 访问类属性
print(MyClass.class_attr)  # 输出 "I am a class attribute"

# 尝试通过实例修改类属性的值(这不会成功)
obj = MyClass()
obj.class_attr = "This won't change the class attribute"
print(obj.class_attr)  # 输出 "This won't change the class attribute"
print(MyClass.class_attr)  # 输出 "I am a class attribute",类属性的值不变
  • 类的属性属于类本身,可以通过类名直接访问,而类的实例的属性只能通过类的实例进行访问。
  • 通过实例化类可以改变类属性的在该实例中的值,但是并不能改变类属性本身的值。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值