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.2python3.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) 
Interesting Posts