python中有一个类似于调用的方法?

python中有一个类似于调用的方法?,python,oop,Python,Oop,如果x是一个类中定义了方法“-call--”的对象,我们可以直接调用x()来执行方法“-call--”。有没有一个像--call--“这样的方法,我通过它直接调用x来获取x的属性值?谢谢你好,舒爱仁勤, 您可以使用object或instance访问class属性,使用python的几种内置方法,如 1.对象。getitem(self,key) 调用以执行自我[关键]评估。对于序列类型,接受的键应该是整数和切片对象。请注意,负索引的特殊解释(如果类希望模拟序列类型)取决于getitem()方法。如

如果x是一个类中定义了方法“-call--”的对象,我们可以直接调用x()来执行方法“-call--”。有没有一个像--call--“这样的方法,我通过它直接调用x来获取x的属性值?谢谢

你好,舒爱仁勤,

您可以使用object或instance访问class属性,使用python的几种内置方法,如

1.对象。getitem(self,key) 调用以执行自我[关键]评估。对于序列类型,接受的键应该是整数和切片对象。请注意,负索引的特殊解释(如果类希望模拟序列类型)取决于getitem()方法。如果键的类型不合适,可能会引发TypeError;如果某个值超出序列的索引集(在对负值进行任何特殊解释之后),则应引发IndexError。对于映射类型,如果缺少键(不在容器中),则应引发KeyError

比如说,

class Library:
    def __init__(self):
         self.books = { 'title' : 1, 'title2' : 2, 'title3' : 2 }
    def __getitem__(self, i):
             return self.books[i]
    def __iter__(self): 
        return self.books.itervalues()

librarya = Library()
print librarya['title']
class Animal(object):
    def __init__(self, name, legs):
        self.name = name
        self.legs = legs
        self.stomach = []        

    def __call__(self,food):
        self.stomach.append(food)

    def poop(self):
        if len(self.stomach) > 0:
            return self.stomach.pop(0)

    def __str__(self):        
        return 'A animal named %s' % (self.name)       

cow = Animal('king', 4)  #We make a cow
dog = Animal('flopp', 4) #We can make many animals
print 'We have 2 animales a cow name %s and dog named %s,both have %s legs' % (cow.name, dog.name, cow.legs)
print cow  #here __str__ metod work

#We give food to cow
cow('gras')
print cow.stomach

#We give food to dog
dog('bone')
dog('beef')
print dog.stomach

#What comes inn most come out
print cow.poop()
print cow.stomach  #Empty stomach

print cow
'''-->output
We have 2 animales a cow name king and dog named flopp,both have 4 legs
A animal named king
['gras']
['bone', 'beef']
gras
[]
'''
class MyClass(object):

    def __init__(self):
        self.data = {'name1': 'Vora Mayur', 'name2': 'Vora Mihir'}

    def __getattr__(self, attr):
        return self.data[attr]

obj = MyClass()
print obj.name1
2.对象。调用(self[,args…]) 当实例作为函数“调用”时调用;如果定义了此方法,则x(arg1,arg2,…)是x的缩写。调用(arg1,arg2,…)

比如说,

class Library:
    def __init__(self):
         self.books = { 'title' : 1, 'title2' : 2, 'title3' : 2 }
    def __getitem__(self, i):
             return self.books[i]
    def __iter__(self): 
        return self.books.itervalues()

librarya = Library()
print librarya['title']
class Animal(object):
    def __init__(self, name, legs):
        self.name = name
        self.legs = legs
        self.stomach = []        

    def __call__(self,food):
        self.stomach.append(food)

    def poop(self):
        if len(self.stomach) > 0:
            return self.stomach.pop(0)

    def __str__(self):        
        return 'A animal named %s' % (self.name)       

cow = Animal('king', 4)  #We make a cow
dog = Animal('flopp', 4) #We can make many animals
print 'We have 2 animales a cow name %s and dog named %s,both have %s legs' % (cow.name, dog.name, cow.legs)
print cow  #here __str__ metod work

#We give food to cow
cow('gras')
print cow.stomach

#We give food to dog
dog('bone')
dog('beef')
print dog.stomach

#What comes inn most come out
print cow.poop()
print cow.stomach  #Empty stomach

print cow
'''-->output
We have 2 animales a cow name king and dog named flopp,both have 4 legs
A animal named king
['gras']
['bone', 'beef']
gras
[]
'''
class MyClass(object):

    def __init__(self):
        self.data = {'name1': 'Vora Mayur', 'name2': 'Vora Mihir'}

    def __getattr__(self, attr):
        return self.data[attr]

obj = MyClass()
print obj.name1
3.对象。getattr(self,name) 当属性查找未在常规位置找到属性时调用(即,它不是实例属性,也不是在类树中为self找到的属性)。name是属性名。此方法应返回(计算的)属性值或引发AttributeError异常

请注意,如果通过正常机制找到该属性,则不会调用getattr()。(这是getattr()和setattr()之间有意的不对称。)这样做既出于效率原因,也因为否则getattr()将无法访问实例的其他属性。请注意,至少对于实例变量,您可以通过不在实例属性字典中插入任何值(而是在另一个对象中插入值)来伪造total control。请参阅下面的getattribute()方法,了解在新样式类中实际获得总控制的方法

比如说,

class Library:
    def __init__(self):
         self.books = { 'title' : 1, 'title2' : 2, 'title3' : 2 }
    def __getitem__(self, i):
             return self.books[i]
    def __iter__(self): 
        return self.books.itervalues()

librarya = Library()
print librarya['title']
class Animal(object):
    def __init__(self, name, legs):
        self.name = name
        self.legs = legs
        self.stomach = []        

    def __call__(self,food):
        self.stomach.append(food)

    def poop(self):
        if len(self.stomach) > 0:
            return self.stomach.pop(0)

    def __str__(self):        
        return 'A animal named %s' % (self.name)       

cow = Animal('king', 4)  #We make a cow
dog = Animal('flopp', 4) #We can make many animals
print 'We have 2 animales a cow name %s and dog named %s,both have %s legs' % (cow.name, dog.name, cow.legs)
print cow  #here __str__ metod work

#We give food to cow
cow('gras')
print cow.stomach

#We give food to dog
dog('bone')
dog('beef')
print dog.stomach

#What comes inn most come out
print cow.poop()
print cow.stomach  #Empty stomach

print cow
'''-->output
We have 2 animales a cow name king and dog named flopp,both have 4 legs
A animal named king
['gras']
['bone', 'beef']
gras
[]
'''
class MyClass(object):

    def __init__(self):
        self.data = {'name1': 'Vora Mayur', 'name2': 'Vora Mihir'}

    def __getattr__(self, attr):
        return self.data[attr]

obj = MyClass()
print obj.name1

可能是重复的谢谢你的回答。我知道--call--的功能。我想知道是否有像--call--这样的方法,通过它我可以直接调用x,而不需要添加。一些东西来获取x的属性值,即x.somthing。我理解你的问题。但是当你提问时,请给出你想要的代码示例,并给出类的正确名称,因为任何用户都阅读了你的问题,所以请投反对票。我建议提出最好的问题。谢谢你的建议。不,没有。