一、类的属性
类属性又称为静态属性。这些数据是与他们所属的类对象绑定的,不依赖于任何类实例。
类有两种属性:数据属性和函数属性
- 类的数据属性是所有对象共享的
- 类的函数属性是绑定给对象用的
class Chinese:
country = 'China'
def __init__(self,name):
self.name = name
def play_ball(self,ball):
print('%s is playing %s'%(self,name,ball))
def say_language(self,word):
print('%s 说 %s'%(self.name,word))
#查看类属性
print(Chinese.country)
#修改类属性
Chinese.country = 'CHINA'
print(Chinese.country)
#删除类属性
del Chinese.country
#增加类数据属性
Chinese.country = 'China'
Chinese.location = 'Asia'
print(Chinese.__dict__)
#增加类函数属性
Chinese.say_language = say_language
p = Chinese('jony')
p.say_language('中国话')
#修改类函数属性
def test(self):
print('修改了函数属性')
Chinese.play_ball = test #将定义好的函数名赋值为原函数属性名即可,调用时还需用原函数属性名
p.play_ball()
二、对象(实例)的属性
对象没有函数属性,调用的是类的函数属性
class Chinese:
country = 'China'
def __init__(self,name):
self.name = name
def play_ball(self,ball):
print('%s is playing %s'%(self,name,ball))
p1 = Chinese('Tony')
print(p1.__dict__)
#查看实例的属性
print(p1.name)
print(p1.play_ball) #实则调用了类的函数属性
#增加实例的属性(一般没有给对象添加函数属性,因为class不会为你自动传入self参数)
p1.age = 18
print(p1.__dict__)
#修改实例的属性
p1.age = 20
print(p1.__dict__)
#删除实例的属性
del p1.age
print(p1.__dict__)
三、属性的调用
- 在类内定义的变量均存放在属性字典内。
如果是以点方式来调用,则在类环境里寻找,自下而上寻找。
如果直接变量名,则寻找的是类的外部全局变量
。如果不是通过直接赋值对实例属性进行修改,若改属性实例不存在,类存在,则可以通过实例进行修改
,如下示例:
class Chinese:
country = 'China'
l = ['a','b']
def __init__(self,name):
self.name = name
def play_ball(self,ball):
print('%s is playing %s'%(self,name,ball))
p2 = Chinese('Jerry')
p2.country='japen'
print(p2.country) #输出japen
print(Chinese.country) #输出China
p2.l.append('c')
print(p2.l) #['a','b','c']
print(Chinese.l) #['a','b','c']
转自:Meanwey
来源:CSDN
作者:梦寐_
链接:https://blog.csdn.net/HHG20171226/article/details/93138131