我想知道是否有办法"链接"一个类的两个属性或给同一个属性赋予两个名称?
例如,我实际上正在编写一个脚本,该脚本根据用户提供的数据创建三角形.我的三角形是ABC.这个三角形的边是AB,BC和CA. 所以三角形有这3个属性(self.AB,self.BC,self.CA).但AB = BA所以我想允许用户print myInstance.BA代替print myInstance.AB.
所以我想创建属性self.AB和属性BA(返回self.AB).当我尝试做print myInstance.BA而不是print myInstance.AB但我很贪心时工作正常...
我也想让用户做myInstance.BA = 5而不是myInstance.AB = 5在做这个时也编辑属性AB.
有办法做到这一点吗?
dee*_*ets 11
Python属性可以有setter.所以你需要的只是
class Foo(object):
@property
def BA(self):
return self.AB
@BA.setter
def BA(self, value):
self.AB = value
Run Code Online (Sandbox Code Playgroud)
并且通过@ amccormack的回答,如果你可以依赖属性名称的顺序,这对于例如edge bc,cd更通用:
class Foo(object):
def __init__(self):
self.ab = 100
def __getattr__(self, name):
return getattr(self, "".join(sorted(name)))
def __setattr__(self, name, value):
super(Foo, self).__setattr__("".join(sorted(name)), value)
f = Foo()
print f.ba
f.ba = 200
print f.ba
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
339 次 |
| 最近记录: |