python类的实例理解_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

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"

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值