• 类的继承

    • 新式类,广度优先,先在水平方向查找,然后再向上查找。
    • 经典类,深度优先。
    Python3 取消了经典类,默认都是新式类,并且不必显式的继承object
    class Person(object):pass
    class Person():pass
    class Person:pass
    三种写法无区别
    
    Python2 默认都是经典类,只有显示继承object才是新式类
    class Person(object):pass 新式类
    class Person():pass 经典类
    class Person:pass 经典类
    

    调用父类属性

    • 第一种方法:
    class A:
    	def __init__(self):
    		self.name = "xiaoming"
    	def run(self):
    		print("A")
    
    
    class B(A):
    	def __init__(self):
    		#继承父类属性,__init__是重写父类的方法
    		A.__init__(self)
    		self.name_b = "zhangshan"
    	def fun(self):
    		print("B")
    
    print(B().name)
    print(B().name_b)
    
    xiaoming
    zhangshan
    [Finished in 1.0s]
    
    • 第二种方法:推荐( super 继承只能用于新式类,用于经典类就会报错)
    class A:
    	def __init__(self):
    		self.name = "xiaoming"
    	def run(self):
    		print("A")
    
    
    class B(A):
    	def __init__(self):
    		#继承父类属性,__init__是重写父类的方法
    		super(B,self).__init__()
    		self.name_b = "zhangshan"
    	def fun(self):
    		print("B")
    
    print(B().name)
    print(B().name_b)
    
    xiaoming
    zhangshan
    [Finished in 1.0s]
    
    >>>调用父类方法一样<<<<
    class A:
    	def __init__(self):
    		self.name = "xiaoming"
    	def run(self):
    		print("A")
    
    
    class B(A):
    	def __init__(self):
    		self.name_b = "zhangshan"
    	def fun(self):
    		#调用父类方法
    		super(B,self).run()
    		print("B")
    
    print(B().fun())
    
    A
    B
    [Finished in 1.0s]
    

    类的内置装饰器

    • @property,把类中的方法当做属性来访问。
    class B(A):
    	def __init__(self):
    		self.name_b = "zhangshan"
    	@property
    	def run(self):
    		print("B")
    
    print(B().run)
    
    B
    [Finished in 1.6s]
    
    • @staticmethod,静态方法装饰器,可以通过类对象访问。
    class B(A):
    	def __init__(self):
    		self.name_b = "zhangshan"
    	#这里的方法不需要加self
    	@staticmethod
    	def run():
    		print("B")
    
    #类对象调用方法
    print(B.run())
    
    B
    [Finished in 1.0s]
    
    • @classmethod,类的方法装饰器,通过类对象访问,主要区别类参数传入类对象(cls)
    class B(A):
    	def __init__(self):
    		self.name_b = "zhangshan"
    	#这里的方法不需要加self,传入cls
    	@classmethod
    	def run(cls):
    		print("B")
    
    #类对象调用方法
    print(B.run())
    
    B
    [Finished in 1.0s]
    

    __call__方法 ,让类中的方法像函数一样调用,类的装饰器,就是重写这个方法。

    class B(A):
    	#重写这个call方法,让类加上()就可以被调用。
    	def __call__(self,x):
    		print("call")
    		print(x)
    
    c=B()
    c("aaa")
    
    call
    aaa
    [Finished in 1.3s]
    
  • 相关阅读:
    [原]如何在Android用FFmpeg+SDL2.0之同步视频
    鹤山市五泉酒厂 (“侨乡情”酒 )
    买酒的网站(转)
    泥鳅、黄鳝有关技术。
    国产 冰葡萄酒 主要生产地、品牌
    对症治疗过敏性鼻炎,依巴斯汀比氯雷他定更有效
    魔筎精粉制作 ----新化联系人
    拉肚子使用的常见药物
    一些WCF DS 的资料(参考)
    SHAREPOINT 2013 + PROJECT 2013 资料网站
  • 原文地址:https://www.cnblogs.com/sunjingjingking/p/10211683.html
Copyright © 2020-2023  润新知