如果x是其类中的对象方法" - call - "定义后,我们可以直接调用x()来执行方法" - call - "。有没有像" - call - "通过它我直接调用x来获取x属性的值?感谢
答案 0 :(得分:0)
你好shuairenqin,
您可以使用python几个内置方法(如
)使用对象或实例访问class属性被要求实施自我[密钥]的评估。对于序列类型,接受的键应该是整数和切片对象。请注意,负索引的特殊解释(如果类希望模拟序列类型)取决于 getitem ()方法。如果key是不合适的类型,则可能引发TypeError;如果序列的索引集之外的值(在对负值进行任何特殊解释之后),则应引发IndexError。对于映射类型,如果缺少键(不在容器中),则应引发KeyError。
Note for loops expect that an IndexError will be raised for illegal indexes to allow proper detection of the end of the sequence.
例如,
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']
当实例被“调用”为函数时调用;如果定义了这个方法,x(arg1,arg2,...)是x的简写。调用(arg1,arg2,...)。
例如,
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
[]
'''
当属性查找未在通常位置找到属性时调用(即,它不是实例属性,也不是在类树中找到自己)。 name是属性名称。此方法应返回(计算的)属性值或引发AttributeError异常。
请注意,如果通过常规机制找到属性,则不会调用 getattr ()。 (这是 getattr ()和 setattr ()之间的故意不对称。)这样做既出于效率原因,又因为 getattr ()无法访问实例的其他属性。请注意,至少对于实例变量,您可以通过不在实例属性字典中插入任何值来伪造总控制(而是将它们插入另一个对象中)。请参阅下面的 getattribute ()方法,了解在新式类中实际获得完全控制的方法。
例如,
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