python 类 实例 理解记录

python 类 方法

class Person(object):
    # 类属性
    name = "xiaohong"
    #name_list = ["xiaohong","xiaoming"]

    # 实例方法
    def set_age(self):
        # 类属性 复制一份数据到 实例中
        print(self.name is Person.name,"1")
        # 重新赋值后可以看到 类属性和实例属性 并不是同一个东西,只是值相同,名称相同
        # 实例属性
        self.name = "xh"
        print(self.name is Person.name,self.name,Person.name,"2")
        self.score = 12
    #类 方法
    @classmethod
    def get_value(cls):
        #类方法 访问的是 类属性 不是复制
        print(cls.name)
        cls.name = "xj"
        print(cls.name,Person.name)
    @classmethod
    def get_score(cls):
        print(cls.score)

Person().set_age()
Person.get_value()
print(Person.name) # 访问类属性
print(Person().name) #访问实例属性 实例属性没有初始化但是有值,是类属性复制了一份到 实例中
try:
    print(Person.age)
except Exception as e:
    print(e.args)
Person.age = 12 #给 类 添加属性
print(Person.age)

print("######测试 类方法 不能访问 实例属性")
A = Person()
print(A.set_age())
A.get_score()

===================
Traceback (most recent call last):
  File "D:/pycharm_project/helloworld/test_unittest/test02.py", line 40, in <module>
True 1
False xh xiaohong 2
xiaohong
xj xj
xj
xj
("type object 'Person' has no attribute 'age'",)
12
######测试 类方法 不能访问 实例属性
True 1
False xh xj 2
None
    A.get_score()
  File "D:/pycharm_project/helloworld/test_unittest/test02.py", line 24, in get_score
    print(cls.score)
AttributeError: type object 'Person' has no attribute 'score'

名词:

  • 实例方法 无装饰器
  • 实例属性
  • 类方法 @classmethod
  • 类属性
  • 静态方法 @staticmethod

类属性

  • 在实例方法中可以直接访问类属性的值
    (因为类属性会复制一份数据到实例中,只要实例中没有对 对应实例的属性进行重新赋值就可以访问到该数据)
  • 不可以直接对类属性进行修改
  • 或者直接在 实例方法中用类进行访问 和重新赋值都是可以的Person.name

实例属性:

  • 在实例方法中可以直接修改和访问实例属性
  • 在类方法中不可以直接访问或修改实例属性
  • 但是可以通过访问实例方法去访问或者修改实例属性

实例方法 和 类方法:

  • 实例方法可以访问类方法
  • 类方法可以访问实例方法

静态方法

  • 实例方法和类方法都可以访问静态方法
  • 静态方法,不可以直接访问 类属性,实例属性,类方法和实例方法也不可以直接访问,(可以通过先访问类或者建实例去间接访问)
  • 此方法就像不是定义在类内,和类外的方法唯一区别,需要通过实例或者类才能访问到该方法
  • 静态方法直接也不可以直接访问,相互独立,同样需要用实例或者类进行间接访问

类属性会 赋值一份到 实例中,那有什么方法不复制到实例中吗?

__name = "xiaohong"
在类中使用下划线进行设置属性,则不会复制到 实例中

posted on 2019-12-29 20:36  游荡的鱼  阅读(167)  评论(0编辑  收藏  举报

导航