zoukankan      html  css  js  c++  java
  • 类的继承

    • 新式类,广度优先,先在水平方向查找,然后再向上查找。
    • 经典类,深度优先。
    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]
    
  • 相关阅读:
    解决Redis之MISCONF Redis is configured to save RDB snapshots
    lnmp一键安装redis以及php组件
    多版本PHP使用composer
    composer设置成阿里云镜像
    Yaf 简介
    Ubuntu配置php7.2开机启动
    Ubuntu查看开机日志
    ssh生成公钥
    Ubuntu系统如何分区
    初始化一个yaf项目
  • 原文地址:https://www.cnblogs.com/sunjingjingking/p/10211683.html
Copyright © 2011-2022 走看看