[python面向对象]--基础篇
1.#类 #类就是一个模板,模板里可以包含多个函数,函数里实现一些功能 #定义一个类 class bar: def foo(self,agr): print(self,agr) obj = bar() print(obj) print(obj.foo("调用类的方法")) 2.#方法 #把函数写在类里就是方法 #构造方法 #普通方法 class person: def __init__(self,name,age): #构造方法的特性,调用 类名() 后,自动执行构造方法 #self 谁调用类,谁就是self self.n = name self.a = age self.xue = 0 def show(self): #普通方法 print("%s--%s"%(self.n,self.a)) obj = person("haha",20) obj.show() 3.#面向对象三大特性之一:封装 class bar: def __init__(self,n,a): self.name = n self.age = a self.xun = 0 b1 = bar("zhangw",11) b2 = bar("haha",31) 4.#面向对象三大特性之二:继承 #self永远是执行该方法的调用者 #继承 class 父类: pass class 子类(父类): pass #子类可以调用父类的方法 #如果子类中有和父类一样的方法名,则优先调用自己的,也就是重写 #重写,防止执行父类的方法 #重写后,如果想要执行父类的方法 1.#super(子类,self).父类中的方法() 2.#父类名,父类中的方法(self,...) #python中支持多继承 #原则 #1.左侧优先,这里的左侧指的是调用的时候,比如:class zilei(fulei1,fulei2),fulei1 优先 #2.左侧找完再找右侧 #3。如果左右两侧最后汇聚到同一个根,则最后找根 5.#面向对象三大特性之三:多态 #原生多态,“鸭子类型” #当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子 class F1: pass class S1(F1): def show(self): print(S1.show) class S2(F1): def show(self): print(S2.show) def Func(obj): print(obj.show()) s1_obj = S1() Func(s1_obj) s2_obj = S2() Func(s2_obj) 6.#类成员 #字段 #普通字段,保存在对象中,只能通过对象访问 #静态字段,保存在类中,可以用个类,或者对象访问 #方法 #普通方法,保存在类中,由对象直接调用,self = > 对象 #静态方法,保存在类中,由类直接调用 #类方法,保存在类中,由类直接调用cls = >当前类 class province: country = "中国" def __init__(self,name): self.name = name @staticmethod #静态方法 def jingtai(): print("我是静态方法,不需要对象") @classmethod #类方法 def classmd(cls): print(cls) print("haha") print(province.country) hebei = province("河北") print(hebei.name) province.jingtai() province.classmd() #属性,特性 #@property # 由属性的定义和调用要注意一下几点: # 定义时,在普通方法的基础上添加 @property 装饰器; # 定义时,属性仅有一个self参数 # 调用时,无需括号 # 方法:foo_obj.func() #属性:foo_obj.prop # ############### 定义属性 ############### class Goods(object): @property def price(self): print(property) @price.setter def price(self, val): print(val) @price.deleter def price(self): print(666) # ############### 调用 ############### #obj = Goods() #obj.price # 自动执行 @property 修饰的 price 方法,并获取方法的返回值 #obj.price = 123 # 自动执行 @price.setter 修饰的 price 方法,并将 123 赋值给方法的参数 #del obj.price # 自动执行 @price.deleter 修饰的 price 方法
人生短短数十载,经不起几次重头再来