静态方法
普通方法是实例调用的,而静太方法是类调用的。而且参数里面没有self,
对于静态方法跟对象没有关系,它属于类
静态方法是根据类来调用执行的。对象是用来封装数据的,如果你所做的行为用不到对象,就用静态方法OK啦
实例方法
顾名思义 类实例化后才能调用的方法 , 参数的值默认调用实例化传入参数 , 不存在调用类属性
类方法
@classmethod
def classget(cls):
print(cls.x)
只能调用类属性 ,类对象和实例都可以调用静态方法
静态方法
@staticmethod
def add(a, b):
print (a + b)
类对象和实例都可以调用静态方法
类属性的调用
self. cls. Class. 都可以
class Rational:
@staticmethod
#私有函数命名_
def _gcd(m,n):
if n == 0:
m,n = n,m
while m != 0:
m,n = n%m,m
return n
def __init__(self,num,den=1):
if not isinstance(num,int) or not isinstance(den,int):
raise TypeError
if den == 0:
raise ZeroDivisionError
sign =1
if num < 0:
num,sign = -num,-sign
if den < 0:
den,sign = -den,-sign
g = Rational._gcd(nu,den)
#call function gcd definded in this class
self._num = sign * (num//g)
self._den = den//g
def num(self):
return self._num
def den(self):
return self._den
def __add__(self,another):
den = self._den*another.den()
num = (self._num*another.num()+self._den*another.num())
return Rational(num,den)
def __mul__(self,another):
return Rational(self._num*another.num(),self._den*another.den())
def __floordiv__(self,another):
if another.num() == 0:
raise ZeroDivisionError
return Rational(self._num * another.den(),self._den*another.num())
def __eq__(self,another):
return self._num*another.den() == self._den * another.num()
def __lt__(self,other):
return self._num *another.den() < self._den * another.num()
#其他比较运算符也可以类似定义