同名属性的2个名称

Mor*_*gan 8 python

我想知道是否有办法"链接"一个类的两个属性或给同一个属性赋予两个名称?

例如,我实际上正在编写一个脚本,该脚本根据用户提供的数据创建三角形.我的三角形是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)