Python中类的继承
单继承的语法
class 基类:
def 方法():
pass
class 父类:
pass
这样子类就继承了父类的属性和方法。
一个实例
class Animal:
def __init__(self, name=None):
self.name = name
def func(self):
pass
class Monkey(Animal):
def __init__(self, year, name=None):
self.year = year
self.name = name # 这里输入.的时候按Tab会提示self.name,证明成功继承
def __str__(self):
return "year:%d name:%s" % (self.year, self.name)
def func(self): # 如果想要重写父类的方法,只需要在子类中重定义该方法即可
super().func() # super是一个特殊的类,想要增加父类方法的内容,可以使用super调用父类方法
# 同样可以使用 父类名.方法() 的方式调用,但不推荐使用
mk = Monkey(18, "paipai")
print(mk)
tips:
外界无法直接访问到一个类的私有属性/方法,子类无法直接访问到父类的私有属性/方法。
想要突破以上限制,就需要使用一些公有的函数。
可以类比于C++,在类的private下创建了一个变量,想要访问它,就需要int get_num(){return num;}
多继承的语法
class A: # 父类1
pass
class B: # 父类2
pass
class C(A, B): # 派生类,若两父类有相同方法名时尽量不要使用多继承
pass
# 可以使用 print(C.__mro__) 来查看当出现两个父类方法名相同时的查找顺序。
新式类与旧式类
object是 Python 为所有对象提供的基类,提供一些内置的方法和属性,可以使用dir函数查看
- 新式类:以object为基类的类
- 旧式类:不以object为基类的类
python3.x中定义类时,如果没有指定父类,则默认以object为该类的基类
python2.x中定义时,若无指定则不会以object为基类
今后在定义类时,如果没有父类,最好统一继承自object
class 类名(object):
pass