类方法,实例方法,

类方法必须要有一个cls参数作为方法本身,不能获得类的示例属性

class Person(object):

    __count = 0
    def __init__(self,name):
        self.name=name
        Person.__count=Person.__count+1
    @classmethod
    def how_many(cls):
        return cls.name  #error
        return cls.__count

    def get_count(self):
        return self.__count
        

print Person.how_many()

p1 = Person('Bob')
p1.count=2

print Person.how_many()

  一个实例会先寻找自己的属性,然后再寻找类属性,如上述代码,p1.get_count()会返回1,因为会先找自己的__count属性,没有后再找到类属性Person.__count,

Person.__count=Person.__count+1,改为 self.__count=self.__count+1,那么Person.how_many()不会变,但p1.get_count()会变成1

而如果将

实例方法貌似不能拥有递归:

    def __init__(self, p, q):
        self.p = p
        self.q = q
    def gcd(self,p1,q1):
        if q1==0:
            return p1
        return gcd(self,q1,p1%q1)   #error

    def __add__(self, r):
        return Rational(self.p * r.q + self.q * r.p, self.q * r.q)

    def __sub__(self, r):
        return Rational(self.p*r.q-self.q*r.p,self.q*r.q)

    def __mul__(self, r):
        return Rational(self.p*r.p,self.q*r.q)

    def __div__(self, r):
        return Rational(self.p*r.q,self.q*r.p)

    def __str__(self):
        return '%s/%s' %(self.p,self.q)

    __repr__ = __str__

r1 = Rational(1, 2)
a=r1.gcd(4,1)
print a
r2 = Rational(1, 4)
print r1 + r2
print r1 - r2
print r1 * r2
print r1 / r2

 

posted on 2015-05-26 16:58  学渣的成长之路  阅读(334)  评论(0编辑  收藏  举报

导航