首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

python新手关于类属性的有关问题

2014-01-17 
python新手求教:关于类属性的问题#coding:utf-8class Person:name人def __init__(self):self.namesel

python新手求教:关于类属性的问题
#coding:utf-8
class Person:
    name="人"
    def __init__(self):
        self.name="self"
        
if __name__ == "__main__":
    p = Person()
    print p.name
    print Person.name 

类属性难道不是所有对象共有的吗?self.name="" 这样一用之后,name到底是类属性还是对象属性,为什么最后Person.name的值并没有改变啊?
刚刚开始学python,很多不解之处,望大神指教啊!!!
[解决办法]
python的机制是这样的,实例没有name就会参照类的name,但是一旦self.name=xxx之后,实例自身会建立一个专属的name,一般这种需求比较普遍,就像你写的代码,按逻辑每个实例的name应该是不同的而不是要共享。如果是要共享就显式地写成Person.name=xxx,不过你最好参考内建函数property()的用法建立属性name,改变默认机制,这样外部在使用p.name=xxx时,不至于又成了实例自身的属性...
[解决办法]
你应该是看中文文档看晕了,Python的类的方法和C++一样,静态方法和非静态的方法。静态方法需要前面加@staticmethod声明,非静态方法和C++一样。调用的时候,静态的用类名调,非静态的用对象调。在类里面,是不需要对非静态成员声明的。所以的你Person里面name="人",这个是静态成员,编译器识别大概为@Person_static_name。但是__init__方法中出现了self.name这个时候,他也会创建一个成员,编译器识别大概为@Person_name,虽然两者看似名称相似,但是编译器识别的符号不同,所以是不会覆盖的。下面你调用的时候,用对象调的就是成员,类名调的就是静态成员。所以产生你看到的结果。

热点排行