[英]How to not put self. when initializing every attribute in a Python class?
问候。
我搜索了很长时间,发现了很多相关的问题而我没有答案。 尽管我似乎是一个简单的初学者怀疑。
我们有(我猜)典型的类定义:
class Town:
def __init__(self, Name, Ruler = "Spanish Inquisition"):
self.Name = Name
self.Population = 0
self.LocationX = 0
self.LocationY = 0
self.Religion = "Jedi"
self.Ruler = Ruler
self.Products = ["Redstone", "Azaleas"]
你明白了。 很多属性。 我需要他们所有人。
问题是:**是否有保存所有“自我”的捷径?**我是不是太懒了? 我希望有类似的东西:
with self:
Name = Name
Population = 0
...
当然我知道这不起作用(这不是“with”的使用,而且参数是在一个错误的命名空间。...我做对了吗?)。
我想有很多替代方案可以达到相同的结果,但我真的很好奇Python类的强大功能,我认为其他人对此没有成功。
(一个相关的问题: 组织类属性,构造函数参数和子类构造函数默认值的大多数“pythonic”方式? )
简答:不,你不能。 在Python中访问实例成员(属性,方法)时必须使用self
。
澄清: self
不是Python中的关键字。 在原则上,你可以给,你应该把它的方法的任何名称的第一个参数,但约定的任务self
。
你不会交任何朋友,但有一种方式....:
class Town2:
def __init__(self, name, ruler = 'Spider Pig'):
self.__dict__.update(dict(
Name = name,
Population = 0,
LocationX = 0,
LocationY = 0,
Religion = "Jedi",
Ruler = ruler,
Products = ["Redstone", "Azaleas"]))
这是你可以避免所有过度self
的一种方式,在与DRY保持一致的同时打字:
class Town(object):
def __init__(self, name, data={}):
setattr(self, 'name', name)
for k,v in data.iteritems():
setattr(self, k, v)
default_town_info = {
'population': 0,
'location_x': 0,
'location_y': 0
}
a = Town('foo', default_town_info)
print a.name
print a.population
print a.location_x
这仍然允许您访问您的属性,返回:
foo
0
0
所以是的,有两个自我使用,但如果你总是传递一个字典来确保提供你需要的属性,例如“名字”,它就可以减少。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.