- self 参数是个什么鬼,谁调用self就是谁。
面向对象三大特性之一:封装
class bar: # 建立一个 bar 类
def __init__(self, name, age): # __init__是类里自动运行的方法(函数写在类里就是方法)
self.n = name
self.a = age
self.xue="o" # 共同的特性可以这样搞
def xx(self):
print("%s-%s-%s" % (self.n, self.a,self.xue))
z=bar("gf",14) # 封装到__init__当中
z.xx()
- 创建一个简单的类
class bar:
def add(self,x,y):
print(x+y)
obj=bar() # 要使用类里的方法,首先要建立“中间人”即对象
obj.add(3,4)
class bar:
def foo(self,arg):
print(self.name,self.age,self.gender,arg)
z=bar()
z.name="gf"
z.age=15
z.gender="男"
z.foo(18)
面向对象三大特性之二:继承
关于继承一定要认清 self 是谁
class father: # (父类,基类)
def add(self,x,y):
print(x+y)
class son(father): # son 的父类是 father这个类,这样可以继承 father 里的方法。(子类,派生类)
def abc(self,x,y):
print(x*y)
obj=son()
obj.add(3,4) # 注意 add 里的 self 还是 obj 这个对象
obj.abc(4,5)
注意:如果不想继承某些方法,可以子类中,重新写一个与父类中一样名字的方法。
如果即想执行自己的方法又想继承执行亲类里的方法要这样写:
class father:
def add(self,x,y):
print(x+y)
def foo(self):
print("father-foo")
class son(father):
def abc(self,x,y):
print(x*y)
def foo(self):
super(son,self).foo() # 这样写可以执行自己的方法,还可以继承父类里的方法。当然可以把foo改成父类里的其它方法也可以的。
# super(son,self) 可以理解为找到父类 .foo() 就是执行其方法。
# 这句还可以写成 father.foo(“self”)
print("son-foo")
obj=son()
obj.foo()
在python中一个类可以同时继承多个父类,其寻找方式如下图
class father:
def add(self):
print("父亲这个类里的ADD")
class mother:
def add(self):
print("母亲这个类里的ADD")
class son(father,mother):
pass
obj=son()
obj.add()
面向对象三大特性之三:多态
python可以忽略多态。不用声明类型。