python类里面的注意事项
在学习python写类的过这个中遇到些问题,感觉和以前语言写类的方式有些差别,可能是自己学艺不精才遇到这些问题。
先来一段代码:
class Dog:
n='这是一个类变量' #类变量
n_list=[]
name='这是类的name!'
def __init__(self,name,weapen,role,money=1234):
#构造函数
#在实例化时做一些类的初始化的工作
self.name=name #这个属于实例变量(属性)只是作用于实例本身
self.weapen=weapen
self.role=role
self.money=money
def shot_down(self):
print('%s:被击中!'%self.name)
def buy_gun(self,gun_name):
print('%s:买了一部%s枪'%(self.name,gun_name))
def bulk(self):
print('%s ,Wang Wang Wang!'%self.name)
Dog1=Dog('superman','ak47','ploice')#实例化两个对象
Dog2=Dog('X-man','b211','robber')
print(Dog.n)
Dog1.n='这个Dog1对象的类变量'
Dog1.n_list.append("list_1")
Dog2.n_list=('list_2')
print(Dog2.n)
Dog.n="更改后的类变量!"
print(Dog1.n)
print(Dog2.n)
print(Dog1.n_list)
print(Dog2.n_list)
print(Dog.n_list)
Dog.n_list.append('123')
print(Dog2.n_list)
print(Dog1.n_list)
下面是输出的结果:
这是一个类变量
这是一个类变量
这个Dog1对象的类变量
更改后的类变量!
['list_1']
list_2
['list_1']
list_2
['list_1', '123']
在处理类变量n_list时使用append()内置函数和‘=’赋值的方式结果是不同的,append()函数处理的是针对一个内存地址。用赋值的方式可以的达到的效果是整体改变。对象化会先调用自己的类变量,如果没有就直接使用本身的类变量。