Python中的空类对象

2024-04-23 11:55:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我在教一个Python类面向对象编程,在学习如何解释类时,我看到了一个空的类定义:

class Employee:
    pass

然后,该示例继续定义此类对象的名称和其他属性:

john = Employee()
john.full_name = "john doe"

有趣!

我想知道是否有办法为类的实例动态定义函数?类似于:

john.greet() = print 'Hello, World!'

这在我的Python解释器中不起作用,但是有其他方法可以做到吗?


Tags: 对象实例name名称示例属性定义employee
3条回答

类或多或少是对象的dict属性的精美包装器。当您实例化一个类时,您可以分配给它的属性,这些属性将存储在foo.__dict__;同样,您可以在foo.__dict__中查找您已经编写的任何属性。

这意味着您可以执行一些整洁的动态操作,如:

class Employee: pass
def foo(self): pass
Employee.foo = foo

以及分配给特定实例。(编辑:添加了self参数)

尝试使用lambda

john.greet = lambda : print( 'hello world!' )

你将能够:

john.greet()

编辑:感谢Thomas K的注释-这在Python 3.2上有效,而不是Python2,其中print似乎是statement。但是这对lambdas有效,没有语句(对吗?对不起,我只知道python3.2(:)

您还可以使用collection标准模块中的“命名元组”。命名元组的工作方式类似于“普通”元组,但元素有名称,您可以使用“点语法”访问元素。从collection docs

>>> # 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)
>>> p.x + p.y               # fields also accessible by name
33
>>> p                       # readable __repr__ with a name=value style
Point(x=11, y=22)

相关问题 更多 >