我有很多问题! 看看这段代码plz:
class Dog(object):
_the_most_oldest = int()
def __init__(self,age):
self.age=age
@staticmethod
@property
def the_most_oldest(age):
if Dog._the_most_oldest < age:
Dog._the_most_oldest=age
return Dog._the_most_oldest
是否属性可能是静态方法?
因为我需要一个在实例之间共享的真正静态var - &gt; _the_most_oldest狗! =&GT;所以我需要@property。因为the_most_oldest(age)
方法不适用于任何特殊实例,我需要@staticmethod!
我需要做的第二件事是在每个实例中调用the_most_oldest shuold并计算并刷新_the_most_oldest var。怎么办? 这有错误:
def __init__(self,age):
self.age=age
the_most_oldest(self.age)
答案 0 :(得分:2)
_the_most_oldest = 0
(也许称之为_the_oldest
,更好的英语)@staticmethod
只是一个“包含在类中”的函数,我认为使用@classmethod
会更好。
def _get_oldest(self):
return self._the_oldest
def _set_oldest(self, age):
if Dog._the_oldest < age:
Dog._the_oldest=age
the_oldest = property(_get_oldest, _set_oldest)
答案 1 :(得分:2)
不,属性不能是静态方法(它不是一种方法descriptor)。
创建将保存该类的所有实例的类属性。
class Dog(object):
_dogs = []
并将新实例放入_dogs
类属性。
def __init__(self, age):
self._dogs.append(self)
self.age = age
然后创建classmethod the_most_oldest
。这将计算所有实例中最老的狗。
@classmethod
def the_most_oldest(cls):
return max(cls._dogs, key=lambda dog: dog.age)