python中有一个类似于调用的方法?
如果x是一个类中定义了方法“-call--”的对象,我们可以直接调用x()来执行方法“-call--”。有没有一个像--call--“这样的方法,我通过它直接调用x来获取x的属性值?谢谢你好,舒爱仁勤, 您可以使用object或instance访问class属性,使用python的几种内置方法,如 1.对象。getitem(self,key) 调用以执行自我[关键]评估。对于序列类型,接受的键应该是整数和切片对象。请注意,负索引的特殊解释(如果类希望模拟序列类型)取决于getitem()方法。如果键的类型不合适,可能会引发TypeError;如果某个值超出序列的索引集(在对负值进行任何特殊解释之后),则应引发IndexError。对于映射类型,如果缺少键(不在容器中),则应引发KeyError 比如说,python中有一个类似于调用的方法?,python,oop,Python,Oop,如果x是一个类中定义了方法“-call--”的对象,我们可以直接调用x()来执行方法“-call--”。有没有一个像--call--“这样的方法,我通过它直接调用x来获取x的属性值?谢谢你好,舒爱仁勤, 您可以使用object或instance访问class属性,使用python的几种内置方法,如 1.对象。getitem(self,key) 调用以执行自我[关键]评估。对于序列类型,接受的键应该是整数和切片对象。请注意,负索引的特殊解释(如果类希望模拟序列类型)取决于getitem()方法。如
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。我理解你的问题。但是当你提问时,请给出你想要的代码示例,并给出类的正确名称,因为任何用户都阅读了你的问题,所以请投反对票。我建议提出最好的问题。谢谢你的建议。不,没有。