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]
    
  • 相关阅读:
    containerd
    0/1 nodes are available: 1 node(s) had taint {node-role.kubernetes.io/master: }
    failed to pull image k8s.gcr.io/kube-controller-manage
    journalctl
    How to use Kata Containers and CRI (containerd plugin) with Kubernetes
    kubelet kubeadm kubectl install
    make an overlay with mount
    2018-2-13-不使用数据结构反转栈
    2018-8-10-卷积神经网络全面解析
    论分布式系统内的节点坏盘感知
  • 原文地址:https://www.cnblogs.com/sunjingjingking/p/10211683.html
Copyright © 2011-2022 走看看