我是在玩Python,因为我对它比较陌生。下面是一个片段
class Person:
version = "1.0"
def __init__(self, name="john doe",age=25):
self.name = name
self.first_name = name.split()[0]
self.second_name = name.split()[1]
self.age = age
def printi(self):
print(self.name)
new_person = Person()
new_person.printi()
refPerson = Person
print(refPerson.version)
another_one = refPerson()
#another_one.version = "2.0"
print(another_one.version)
another_one.printi()
print(Person.version)
Person.version = "2.0"
print(another_one.version)
print(refPerson.version)
如果您注意到,类名Person直接分配给变量refPerson。我的印象是,这篇作业将创建一个名为refPerson的新类。但是当我修改Person类属性时,我可以看到值的变化反映在新类中。我错过了什么?我只需要一张清晰的照片。 提前谢谢
类是Python中的第一类对象;你可以到处传递对它们的引用
Person
是对class
语句定义的类的引用Person()
(像函数一样调用class
对象)返回该类的实例属性查找规则可能会变得复杂,但对于本例,以下简化就足够了。由于既没有定义
new_person.version
也没有定义another_one.version
,因此尝试查找其中一个将导致类属性查找。也就是说,new_person.version == type(new_person).version
如果创建具有相同名称的实例属性,它将对类属性进行阴影处理:
在这一阶段,您可能已经准备好了更多的细节,
Person()
分解为以下调用:Person()
等价于Person.__call__(Person)
,其中__call__
是类type
的实例方法,其中Person
是实例(也就是说,type(Person)
返回type
。)Person.__call__
调用Person.__new__
,返回Person
的新实例;叫它p
Person.__call__
然后用p
作为参数调用Person.__init__
李>Person.__call__
返回p
李>相关问题 更多 >
编程相关推荐