欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

python基础--面向对象之继承

程序员文章站 2022-12-21 09:32:57
# 继承是一种创建新类的方式,新建的类可以继承一个,或者多个父类, # 父类又可以称为基类或者超类,新建的类可以称为派生类,子类 class ParentClass1: # 定义父类 1 pass class ParentClass2: # 定义父类 2 pass class SubClass1(P... ......
# 继承是一种创建新类的方式,新建的类可以继承一个,或者多个父类,
# 父类又可以称为基类或者超类,新建的类可以称为派生类,子类
class parentclass1:
    # 定义父类 1
    pass
class parentclass2:
    # 定义父类 2
    pass
class subclass1(parentclass1):
    # 继承一个父类
    pass
class subclass2(parentclass1,parentclass2):
    # 继承两个父类
    pass
print(subclass1.__bases__) # 查看父类
print(subclass2.__bases__)
class animal:
    def eat(self):
        print("%s is eating" %self.name)
    def drink(self):
        print("%s is drinking" % self.name)
    def shit(self):
        print("%s is shiting" %self.name)
    def pee(self):
        print("%s is peeing" %self.name)
# 子类可以使用父类的函数属性和数据属性
class cat(animal):
    def __init__(self,name):
        self.name = name
        self.breed = "猫"
    def cry(self):
        print("喵喵叫")
class dog(animal):
    def __init__(self,name):
        self.name = name
        self.breed = "狗"
    def cry(self):
        print("汪汪叫")

c1 = cat("小白家的黑猫")
c1.eat()
# 当前类中如果没有eat属性,就会去父类中找

c2 = cat("小黑家的白猫")
c2.drink()

d1 = dog("胖子家的瘦狗")
d1.eat()
# 如果子类中有和父类中相同的属性,会优先使用子类中的属性(如果没有特殊说明)
# 因此,我们在开发的过程中,如果定义了一个类a,然后想重新建立一个类b,而且
# b的很多功能和a是相同的,我们只需要把a继承过来,然后在b中写一写不一样的功能
# 就可以了
# 注意当有继承的时候,一定要注意属性查找
class f:
    def f1(self):
        print("f.f1")
    def f2(self):
        print('f.f2')
        self.f1()
class s(f):
    def f1(self):
        print("s.f1")
s = s()
s.f2()
# 我们来看一下代码执行过程
# s为一个对象--要执行f2方法--自己的类中没有--在父类中找--父类中有--
# 注意;父类中这个self是s--打印f.f2--然后执行f1,--先在自己类中找,--
# 找到了--打印s.f1
# 假如我们在子类中相用父类的方法,两种办法
# 一,直接用类名即:父亲名.方法名()
# 二,super()
class animal:
    def __init__(self,name,age,gender):
        self.name = name
        self.age = age
        self.gender = gender

class people(animal):
    def __init__(self,name,age,gender):
        animal.__init__(self,name,age,gender)
class cat(animal):
    def __init__(self,name,age,gender):
        # 这是不用传入对象本身,
        # super()相当于super(cat,self)
        super().__init__(name,age,gender)
peo = people('wangcong',21,'mal')
cat = cat('cat',2,'male')
print(peo.name,cat.name) # wangcong cat
# 最后总结一点,有关组合和继承,
# 1,人是动物,猫是动物,这就是继承关系,
# 2,学校有教室,学生有书本。这就是组合关系,
#       一个类在另一个类中,一个对象跟另一个对象有关系
# 简单看一下组合
list1 = list() # 我们之前说list是一个类,用来实例化一个对象
str1 = "hello" # 同样str1也是一个字符串对象
list1.append(str1)
print(list1)
# 此时,他们之间就是组合关系