1.__str__,__repr__ 自动打印__init__变量为字符串
class Person:
def __init__(self, name, age, sex):
self.name = name
self.age = age
self.sex = sex
def __str__(self):
return ('%s,%s,%s'%(self.name,self.age,self.sex))
liming = Person('liming', '31', 'nan')
print(liming)
print(liming.age)
2.类的实例化只是执行了__init__方法
3.装饰器一共三个,分别是:staticmethod , classmethod , property
class Kls(object):
no_inst = 0
def __init__(self):
Kls.no_inst = Kls.no_inst + 1
@classmethod
def get_no_of_instance(cls_obj1):
return cls_obj1.no_inst
ik1 = Kls()
ik2 = Kls()
ik3 = Kls()
print(ik1.get_no_of_instance())
print(Kls.get_no_of_instance())
4. classmethod 把一个方法从对象方法变成类方法;
- 有时候我们要修改的是类中的静态变量/类变量
- 这时候我们不会和self有任何的操作关联,传一个self没用
- 类方法使用类名调用,而不是使用对象名调用***对象也可以调用
- 不用实例化
class Fruits:
__discount = 0.8
def __init__(self,name,price):
self.name = name
self.price = price
@classmethod
def change_price(cls, value):
cls.__discount = value
print(cls.__discount)
pass
a = Fruits('alex', 300)
Fruits.change_price(1)
5.staticmathod 即不操作和self方法相关的,也不操作和类方法相关的,这时候类方法是空白的,使用staticmethod标识一下
classmethod:
6.归一化设计
class Wechatpay:
def __init__(self,name,money):
self.name = name
self.money = money
def pay(self):
print('%s通过微信支付了%s'%(self.name,self.money))
class Alipay:
def __init(self,name,money):
self.name = name
self.money = money
def pay(self):
print('%s通过支付宝支付了%s元'%(self.name, self.money))
def pay(person):
person.pay()
person = Wechatpay('alex', '2000000')
person.pay()