>我创建了没有实例变量的类Circle
。我添加了一个类方法from_diameter
来生成具有给定直径的圆。
class Circle:
@classmethod
def from_diameter(cls, diameter):
cls.diameter = diameter
return cls
diameter
是一个类(静态(变量。但是 - 它看起来也作为实例变量和类变量存在。
myCircle = Circle.from_diameter(10)
print Circle.diameter
print myCircle.diameter
输出:
10
10
为什么有效?没有实例变量diameter
。 我想print myCircle.diameter
应该抛出一个错误。
没有实例变量,只是 Python 对象中的名称查找首先查看实例,然后,如果没有找到匹配项,则查找类。
类实例
类实例是通过调用类对象创建的(见上文(。类实例具有一个实现为字典的命名空间,该字典是搜索属性引用的第一个位置。如果在那里找不到属性,并且实例的类具有该名称的属性,则继续搜索类属性。[...]如果未找到类属性,并且对象的类具有
__getattr__()
方法,则调用该方法以满足查找。
(蟒蛇 2, 蟒蛇 3(
当您尝试使用它仅查看的类访问变量时
cls.__dict__
但是当您尝试使用实例访问变量时,它首先看起来
self.__dict__
如果找到则返回,或者如果找不到,则也会查找
cls.__dict__
这里 CLS 是类
class Test:
temp_1=10
temp_2=20
def __init__(self):
self.test_1=10
self.test_2=20
@classmethod
def c_test(cls):
pass
def t_method(self):
pass
print Test.__dict__
print Test().__dict__
输出:
{'c_test': <classmethod object at 0x7fede8f35a60>, '__module__': '__main__', 't_method': <function t_method at 0x7fede8f336e0>, 'temp_1': 10, '__doc__': None, '__init__': <function __init__ at 0x7fede8f335f0>, 'temp_2': 20}
{'test_2': 20, 'test_1': 10}
对于详细信息类特殊属性