本帖最后由 武汉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'>]#查看顺序
如果不同的两个父类出现相同名称的属性或方法,子类会继承谁的属性或方法?
会继承离子类最近的一个父类
|
|