Python 如何创建我可以使用的类;得到“;?

Python 如何创建我可以使用的类;得到“;?,python,class,attributes,Python,Class,Attributes,在Python中,我试图创建一个具有我可以“获取”的属性的类(很抱歉,如果这个措辞不完全正确) 基本上,我试图定义一些具有属性var1和var2的类p。因此,我可以使用p.get(“var1”)和p.get(“var2”)来获取这些各自属性的值。如何定义这样的内容?您可以使用get()方法定义一个类,并检查实例是否具有内置getattr()方法的属性,如下所示: class MyClass: def get(self, property, default=None): return

在Python中,我试图创建一个具有我可以“获取”的属性的类(很抱歉,如果这个措辞不完全正确)


基本上,我试图定义一些具有属性
var1
var2
的类p。因此,我可以使用
p.get(“var1”)
p.get(“var2”)
来获取这些各自属性的值。如何定义这样的内容?

您可以使用
get()
方法定义一个类,并检查实例是否具有内置
getattr()
方法的属性,如下所示:

class MyClass:

  def get(self, property, default=None):
    return getattr(self, property, default)

  var1 = 'var1'
  var2 = 'var2'


myInstance = MyClass()

print(myInstance.get('var1'))
print(myInstance.get('var3', 'NonExisting Attribute'))
这是我刚刚创建的一个正在工作的repl.it项目:


您还可以使用
hasattr()方法检查实例是否具有属性:

class MyClass:

  def get(self, property, default=None):
    if hasattr(self, property):
      return getattr(self, property)
    else:
      return default
      # Or you can raise an exception here
例如对象
类测试:
定义初始化(自):
self.a=1
self.b=2
def get(自我,变量):
返回eval('self.%s'%var)
t=测试()
a=t.get('a')
打印(a)##输出:1
对于类对象
类测试:
a=1
b=2
@类方法
def get(cls,var):
返回eval('cls.%s'%var)
a=测试。获取('a')
打印(a)#输出:1

您可以使用
dict
代替使用
get()方法定义
。做一个关于python类的教程,您会立即明白什么是属性和方法,以及如何使用方法返回属性。我认为还值得注意的是,您还可以使用
hasattr()
检查命名属性是否存在。@martineau答案的第一个版本包括
hasattr()
方法,但我是这样编辑的。我将更新它以包括这种方法。我认为现在它更好了(已经投票了)。@martineau感谢改进:)当然也感谢投票。