类方法,实例方法,

类方法必须要有一个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

 

你可能感兴趣的:(方法)