# pass 空语句,为了保持程序结构的完整性
# 经典类
class A:
pass
class A():
pass
# object 是python中为所有对象提供的顶级父类
class A(object):
pass
# 1、继承
# 继承可以使子类具有父类的所有属性和方法
# 继承分为单继承和多继承
# 单继承的语法:
# class 类名(父类名):
# pass
# 1、定义动物类,方法:吃饭和睡觉
class Animal(object): # 动物类--》父类
def __init__(self, name):
self.name = name # 实例属性
def eat(self):
print(f'{self.name}在干饭')
def sleep(self):
print(f'{self.name}在睡觉')
# 2、定义一个狗类,继承动物类
class Dog(Animal):
pass # 占位符,代码里面类下面不写东西,会自动跳过
# 3、通过狗类创建对象,通过对象去调用方法
dog = Dog('修勾')
dog.eat()
dog.sleep()
# 总结:子类可以继承父类的所有属性和方法,就算自己没有,也可以使用父类的
# 继承的传递性:子类拥有父类以及父类的父类中的属性和方法
class GrandFather(object): # 父类的父类
def eat(self):
print('吃饭')
def sleep(self):
print('睡觉')
class Father(GrandFather): # 父类
def study(self):
print('学习')
class Son(Father): # 子类
pass
son = Son()
son.eat()
son.sleep()
son.study()
# 多继承定义格式:
# class 类名 (父类名1,父类名2,...)
# pass
# 多继承让子类同时拥有多个父类的属性和方法
class Father1(object):
def money(self):
print('继承财产')
class Mother1(object):
def beautiful(self):
print('继承样貌')
class Son1(Father1, Mother1):
pass
son1 = Son1()
son1.money()
son1.beautiful()
# 不同的父类存在同名的方法
class Father2(object):
def height(self):
print('身高一米八')
class Mother2(object):
def height(self):
print('身高一米六')
class Son2(Father2, Mother2): # 子类---谁先继承就用谁(就近原则)
def height(self):
print('身高一米七')
son2 = Son2()
son2.height()
# python中内置属性__mro__可以查看方法搜索顺序
# 类名.__mro__
print(Son2.__mro__)
# 重写
# 1、覆盖 父类的方法:在子类中定义一个跟父类同名的方法,会子类的重写方法
class Person(object):
def work(self):
print('厨师,做饭很好吃')
class Son3(Person):
def work(self):
print('老师,教书育人')
son3 = Son3()
son3.work()
# 对父类方法进行扩展:继承父类的方法,子类可以添加自己的功能
# 实现方式有三种:
# ①父类名.方法名(self)
# ②super().方法名() 推荐使用
# ③super(子类名,self).方法名()
class Person6(object):
def work(self):
print('厨师,做饭很好吃')
def eat(self):
print('干饭人干饭魂')
class Son6(Person6):
def work(self):
# ①父类名.方法名(self)
Person6.work(self)
# ②super().方法名()
super().work()
super().eat()
# ③super(子类名,self).方法名
super(Son6, self).work()
print('老师,教书育人')
son6 = Son6()
son6.work()
# 封装指的是隐藏对象中一些不希望被外部所访问到的属性和方法
# 类,本身就是一种封装
# 类中定义私有属性,只能在类的内部使用,外部无法访问
# 方法:在属性名和方法名前面加上两个下划线__。
class Person7(object):
sex = '男'
__age = 30 # 私有属性
def funa(self):
print('在实例方法中访问类属性:', self.sex)
print('在实例方法中访问私有属性:', self.__age)
class Son7(Person7):
pass
son7 = Son7()
print(son7.sex)
# print(son7.age) # 报错,Son对象里面没有age属性
# 第一种:
# 私有属性:外部不能访问到
son7.funa()
# 第二种:了解 语法:对象名._类名__私有属性
print(son7._Person7__age)
# 私有方法
class Person8(object):
sex = '男'
__age = 30 # 私有属性
def __sing(self):
print('爱唱歌')
def funa(self):
print('在实例方法中访问类属性:', self.sex)
print('在实例方法中访问私有属性:', self.__age)
# 在实例方法中调用私有方法
# Person8.__sing(self)
self.__sing()
class Son8(Person8):
pass
son = Son8()
# son.sing() # 报错
# son.__sing() # 报错
son.funa()
Python之继承、封装
最新推荐文章于 2024-05-20 07:30:27 发布