[英]How can I use a class method to create a custom class instance?
我是Python OOP的新手并尝试创建一个类,我可以根据我是否要自定义实例来生成这两种方式的实例:
alien_one = Alien(1)
alien_two = Alien(1).customize(anger=5, emotion=1)
我在使用classmethods和staticmethods之后得到了以下代码,我觉得我应该根据其他线程使用它:
class Alien(object):
def __init__(self, polarity):
self.polarity = {1 : 'friendly', 2 : 'aggressive'}
def customize(self, **kwargs):
for event in kwargs:
# // process events to change self.polarity
return self
此代码是否适合创建Alien实例,或者我应该使用方法装饰器来生成实例? 在我开始之前,有一些事情让人感到不安。
编辑:感谢所有回复,一般的共识是将任何表达式或kwargs传递给__init__
。 我所指的一些示例代码如下所示:
query = Tweet.update(is_published=True).where(Tweet.creation_date < today)
这是一个来自Peewee ORM的例子。 当我试图在我的类中使用方法装饰器(静态/类)时,我丢失了is_published
参数并且无法访问它。 为了更清楚地理解,任何人都可以解释如何在类对象中接收is_published
和Tweet.creation_date
,看起来查询确实是Tweet类的全新实例。 我只是以Peewee为例来理解这段代码是如何工作的,而不是试图弄清楚Peewee的任何细节是如何运作的。
我认为首先要定义哪些属性应该是内部的,哪些属性应该暴露给接口。 例如,您可能希望极性是内部属性,取决于愤怒。
class Alien(object):
polarity = 1
polarity_names = {1 : 'friendly', 2 : 'aggressive'}
def __init__(self, anger=1):
self.customize(
anger = anger,
)
def get_polarity(self):
return self.polarity_names[self.polarity]
def customize(self, **kwargs):
for feeling_name, feeling_intensity in kwargs.items():
if feeling_name == 'anger':
self.polarity = feeling_intensity
alien_one = Alien()
print('Alien 1 polarity: ' + alien_one.get_polarity())
alien_two = Alien(anger=2)
print('Alien 2 polarity: ' + alien_two.get_polarity())
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.