我上课时经常这样做:
class Bulbasaur:
"""Quite obviously, the best pokemon"""
self __init__(self, n_potions = 0, berries = 0, nickname = '')
self.n_potions = n_potions
self.berries = berries
self.nickname = nickname
也许还有其他方法可以处理以下问题-如果可以,请 提供(!)-但这似乎更简单:
class Bulbasaur:
"""Quite obviously, the best pokemon"""
self __init__(self, self.n_potions = 0, self.berries = 0, self.nickname = '')
pass
直接在其中用正确的值填充字段的位置
__init__
个参数。
这可能吗?如果没有,它的设计缺陷是什么?如果没有,那里
解决上述情况的更好方法?
答案 0 :(得分:2)
这是Python中的一个故意设计决策:没有特殊的语法来定义实例应具有的属性或在创建对象后初始化对象。 __init__
只是另一种方法,尽管在实例化类的过程中会调用该方法。
Python 3.7中引入的数据类提供了减少某些样板的方法。类语句主体中带注释的变量用于定义__init__
的默认实现(以及其他特殊方法),该实现实现您通常想要的操作,即仅基于__init__
的参数设置属性:
from dataclasses import dataclass
@dataclass
class Bulbasaur:
n_potions: int = 0
berries: int = 0
nickname: str = ''
b1 = Bulbasaur()
assert b1.n_potions == 0 and b1.berries == 0 and b1.nickname == ''
b2 = Bulbasaur(3, 2, 'foo')
assert b2.n_potions == 3 and b2.berries == 2 and b2.nickname == 'foo'