python空类对象
我正在教一个关于面向对象编程的Python类,当我正在研究如何解释类时,我看到一个空的类定义:
class Employee: pass
这个例子继续为这个类的一个对象定义一个名称和其他属性:
john = Employee() john.full_name = "john doe"
有趣!
我想知道是否有办法为这样的类dynamic定义一个函数? 就像是:
john.greet() = print 'hello world!'
这在我的python解释器不起作用,但有没有另一种方法呢?
一个类或多或less地是对物体属性的一个讽刺包装。 当你实例化一个类,你可以分配给它的属性,这些将被存储在foo.__dict__
; 同样,你可以在foo.__dict__
你已经写好的属性。
这意味着你可以做一些整洁dynamic的事情,比如:
class Employee: pass def foo(self): pass Employee.foo = foo
以及分配给特定的实例。 (编辑:添加self
参数)
尝试使用lambda
:
john.greet = lambda : print( 'hello world!' )
你将能够做到:
john.greet()
编辑 :感谢托马斯K的说明 – 这在Python 3.2
作品,而不是为Python2,其中print
似乎是statement
。 但是这将适用于lambda
s,没有语句 (对吗?对不起,我只知道python3.2
( python3.2
你可以使用AttrDict
>>> from attrdict import AttrDict >>> my_object = AttrDict() >>> my_object.my_attribute = 'blah' >>> print my_object.my_attribute blah >>>
从PyPI安装标准:
pip install attrdict
这在其他情况下也很有用 – 比如当你需要属性访问字典键时。
你也可以使用collection
标准模块中的“命名元组”。 命名元组像“普通”元组一样工作,但元素有名称,可以使用“点语法”访问元素。 从收集文档 :
>>> # Basic example >>> Point = namedtuple('Point', ['x', 'y']) >>> p = Point(11, y=22) # instantiate with positional or keyword arguments >>> p[0] + p[1] # indexable like the plain tuple (11, 22) 33 >>> x, y = p # unpack like a regular tuple >>> x, y (11, 22) >>> px + py # fields also accessible by name 33 >>> p # readable __repr__ with a name=value style Point(x=11, y=22)