找回密码
 立即注册

推荐阅读

  • 便民服务
  • 关注我们
  • 社区新手
本帖最后由 武汉9期--周松丽 于 2021-12-13 20:25 编辑

一.类方法、实例方法、静态方法
1.关于参数的区别
实例变量:定义实例方法至少有一个形参--self
类方法:定义类方法至少有一个形参
静态方法:可以不定义形参
定义方法是装饰器的区别
实例方法:不需要添加装饰器
类方法:需要添加装饰器---@classmethod
静态方法:需要添加装饰器--@staticmethod
二.调用:
1.实例方法可以通过对象直接调用;通过类名调用时,需要创建一个对象并且传递参数时要将对象传进去
2.类方法可以通过类名直接调用,也可以通过对象调用
3.静态方法可以通过类名直接调用,也可以通过对象调用
class Dog():#定义类    age=3#类变量   
def __init__(self):        
self.name='xiaobai'#实例变量   
def a1(self):            
print('{}岁的{}正在跑步!'.format(self.age,self.name))   
@classmethod   
def a2(cls):         
print('xiaohei{}岁了'.format(cls.age))#类方法只能访问类变量   
@staticmethod   
def a3(name):#静态方法 #静态方法与类无关,只是类中的一个功能 #静态方法不能访问类变量与实例变量        
print('{}在睡觉'.format(name))
d=Dog()
d.a1()#通过实例对象调用实例方法
Dog.a1(d)#通过类名称调用实例方法,需要在方法中传入实例对象
d.a2()#通过实例对象调用类方法
Dog.a2()#通过类名称调用类方法
d.a3('xiaohuang')#通过实例对象调用静态方法
Dog.a3('xiaohuang')#通过类名称调用类方法
调用类下的方法,必须通过类的实例对象/类名称()进行调用
当类中初始化方法_init_中存在参数时,则在实例化时,需要往实例括号中传入参数
当类中初始化方法_init_中不存在参数时,则在实例化时,不需要往实例括号中传入参数,在调用方法时再进行传参

class Four():     
def __init__(self,a,b):
self.a=int(a)         
self.b=int(b)     
def a1(self):         
return self.a+self.b
p=Four(2,3)
print(p.a1())
class Four1():     
def s(self,x,y):
         return x +y
print(Four1().s(2,3))
单继承:一个对象使用一个对象的属性和方法,被继承的类也称父类
(1)父类和子类的方法不一样
class Father():   
def __init__(self,car):        
self.car=car   
def a1(self):        
print('有很多钱,买了辆{}'.format(self.car))   
def a2(self):        
print('有很多楼')
class Bigson(Father):   
def s(self):        
print('给女朋友买了辆{}'.format(self.car))
class Smallson(Father):#Smallson类继承Father类,Smallson类拥有Father类的所有方法和属性   
def toys(self):        
print('小儿子也有{}玩具车'.format(self.car))
f=Father('宝马')
f.a1()
s=Smallson('法拉利')
s.toys()#有很多钱,买了辆宝马#小儿子也有法拉利玩具车
(2)子类拥有和父类相同的方法
当子类拥有和父类相同的方法,通过子类实例调用该方法后,执行的是子类下的方法
class a():   
def name(self):        
print('我叫熊大')
class a1(a): #对父类方法重写   
def name(self):        
print('我叫熊二')
m=a1()
m.name()
(3)子类拥有和父类相同的方法和属性
class a():   
def __init__(self,name):        
self.name=name   
def Name(self):        
print('我叫{}'.format(self.name))
class a1(a): #对父类方法重写   
def Name(self):        
print('我也叫{}'.format(self.name))
m=a1('熊大')
m.Name()#我也叫熊大
m1=a1('熊大')
m1.Name()#我也叫熊大
多继承:一个子类继承多个父类
class Mother():   
def __init__(self,something):        
self.something=something   
def b(self):        
print('Mother love {}'.format(self.something))
class Father():   
def __init__(self,work):        
self.work=work   
def Work(self):            
print('Father work is {}'.format(self.work))
class myself(Mother,Father):
def __init__(self,work=None,something=None):  
Father.__init__(self,work)  
Mother.__init__(self,something )
c=myself('test','shopping')
c.Work()#Father work is test
c.b()#Mother love shoppingprint(myself.mro())#[<class '__main__.myself'>, <class '__main__.Mother'>, <class '__main__.Father'>, <class 'object'>]#查看顺序
如果不同的两个父类出现相同名称的属性或方法,子类会继承谁的属性或方法?
会继承离子类最近的一个父类                       





              

              



分享至 : QQ空间
收藏

0 个回复

您需要登录后才可以回帖 登录 | 立即注册