python 类的属性分类_类属性 · python · 看云

## 类属性

**绑定类属性的两种方法**

1、在类对象内部方法中,语法格式:

```

属性名 = 属性值

```

2、在类对象外部,Python是动态语言,在类对象创建后可对其动态地绑定属性。语法格式:

```

类对象.属性名 = 属性值

```

如果指定名称的类属性已经存在,则是对类属性进行修改。

**访问类属性的两种方法**

1、在类对象内部方法中,语法格式:

```

类对象.属性名

```

2、在类对象外部有两种方式,语法格式:

```

类对象.属性名

实例对象.属性名

```

类对象的所有实例对象都有一个指向类对象的指针,所以类对象的所有实例对象都可以访问类属性。

**类对象绑定实例属性示例**

之所以添加前缀"类对象",是为了表明类属性被哪个类对象所绑定。

```

class MyClass():

# 在类对象内部(方法外)绑定类属性

ca1 = 18

def do_sth(self):

# 在类对象内部(方法中)访问类属性

print(MyClass.ca1)

def do_another(self):

# 在类对象内部(方法中)访问类属性

print(MyClass.ca2)

mc = MyClass()

# 在类对象外部调用方法, 使得在类对象内部(方法中)访问类属性

mc.do_sth()

# 在类对象外部通过类对象访问类属性

print(MyClass.ca1)

# 在类对象外部通过实例对象访问类属性

print(mc.ca1)

# 在类对象外部绑定类属性

MyClass.ca2 = 56

# 在类对象外部通过类对象访问类属性

print(MyClass.ca2)

# 在类对象外部通过实例对象访问类属性

print(mc.ca2)

# 在类对象外部修改绑定的类属性值

MyClass.ca2 = 73

# 在类对象外部通过类对象访问类属性

print(MyClass.ca2)

# 在类独享外部通过实例对象访问类属性

print(mc.ca2)

# 在类对象外部调用方法, 使得在类对象内部访问类属性

mc.do_another()

```

## 实例属性与类属性访问区别

访问实例属性和类属性都可以通过`实例对象.属性名`的方式。当通过`实例对象.属性名`的方式访问属性时,会先查找指定的实例对象中有没有指定名称的实例属性,如果没有在查找对应的类对象中有没有指定名称的类属性。所以当通过`实例对象.属性名`的方式访问属性时,如果实例属性和类属性同名,实例属性会屏蔽掉类属性。

当通过实例对象.属性名 = 属性值的方式绑定属性时,这里的属性只表示实例属性(因为类属性没有这样的绑定方式),所以,只会查找指定的实例对象有没有绑定指定名称的实例属性,如果没有则进行绑定,如果已经绑定则对属性值进行修改。

```

class Person():

age = 18

p = Person()

# 在实例对象p中没有找到名为age的实例属性,然后在类对象Person中找到了名为age的类属性

print(p.age)

# 打印名为age的类属性

print(Person.age)

# 给实例对象p绑定实例属性

p.age = 19

# 实例属性屏蔽掉了同名的类属性

print(p.age)

# 打印名为age的类属性

print(Person.age)

# 删除实例对象p绑定的实例属性

del p.age

print(p.age)

p1 = Person()

p2 = Person()

p1.age +=2

print(Person.age)

print(p1.age)

print(p2.age)

Person.age +=3

print(Person.age)

print(p1.age)

print(p2.age)

```

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值