首页 > 其他 > 详细

第二十四天

时间:2020-03-12 00:50:24      阅读:63      评论:0      收藏:0      [点我收藏+]

组合内容回顾

一个类的对象是另一个类对象的属性

两个类之间 有什么什么的关系 :班级有学生 学生有班级 班级有课程 图书有作者 学生有成绩)

学生 课程

班级 课程

圆形 圆环

圆形 圆锥 圆柱

当你改的多的时候, 运用分组比较方便

命名空间

? 在类的命名空间里 :静态变量, 绑定方法

? 在对象命名空间里:类指针,对象的属性(实例属性)

调用习惯

类名:静态变量

对象: 静态变量(对象调用静态变量时候,不能对变量赋值操作, 只能查看 不能 向后面的一样 对象.静态变量‘=‘)

绑定方法

对象.绑定方法() 类名.绑定方法(对象)


三大特性

继承

封装

多态

进阶

# 猫
#     吃
#     喝
#     睡
#     爬树
# 狗
#
#     吃
#     喝
#     睡
#     看家
#
# 继承 --需要解决代码重复的
# 继承语法
#
# class A:
#     pass
# class B:
#     pass
#
# B继承A  A是父类 B是子类
# A是父类 基类  超类
# B是 子类   派生类

继承

B继承A  A是父类 B是子类
A是父类 基类  超类
B是 子类   派生类

子类可以用

父类和子类的方法选择:

? 子类的对象 如果去调用方法

? 永远优先调用自己的

? 如果自己有 用自己的

? 自己没有 用父类的

? 如果自己有 还想用父类的 直接在子类方法中 调父类 的方法 ,

? 父类名.方法名

class Animal:
    def __init__(self,name,food):
    # def __init__(self,name):
        self.name=name
        self.food=food
        self.blood=100
        self.waise=100

    def eat(self):
        # print(f'{self.name} is eating')
        print(f'{self.name} is eating {self.food}')



    def drink(self):
        print(f'{self.name} is drinking')

    def sleep(self):
        print(f'{self.name} is sleep')

class Cat(Animal):
    def clime_tree(self):
        print(f'{self.name} is climbing')
    def eat(self):
        self.blood+=100
        Animal.eat(self)
class Dog(Animal):
    def eat(self):
        self.waise+=100
        Animal.eat(self)

    def house_keep(self):
        print(f'{self.name} is keeping')

小白=Cat('小白','猫粮')
小黑=Dog("小黑",'狗粮')

小白.eat()
小黑.eat()
print(小白.__dict__)
print(小黑.__dict__)

# 
# 小白 is eating 猫粮
# 小黑 is eating 狗粮
# {'name': '小白', 'food': '猫粮', 'blood': 200, 'waise': 100}
# {'name': '小黑', 'food': '狗粮', 'blood': 100, 'waise': 200}

特殊属性

# 小猫 小狗有特殊的属性

class Animal:
    def __init__(self,name,food):
    # def __init__(self,name):
        self.name=name
        self.food=food
        self.blood=100
        self.waise=100

    def eat(self):
        # print(f'{self.name} is eating')
        print(f'{self.name} is eating {self.food}')



    def drink(self):
        print(f'{self.name} is drinking')

    def sleep(self):
        print(f'{self.name} is sleep')

class Cat(Animal):
    def __init__(self,name,food,eyes):
        Animal.__init__(self,name,food) #调用弗雷德方法三 ,去完成一些通用属性的初始化  

        self.eyes=eyes  #派生属性


    def clime_tree(self):
        print(f'{self.name} is climbing')
    def eat(self):
        self.blood+=100
        Animal.eat(self)
class Dog(Animal):
    def eat(self):
        self.waise+=100
        Animal.eat(self)

    def house_keep(self):
        print(f'{self.name} is keeping')

小白=Cat('小白','猫粮','蓝色')
小黑=Cat('小白','猫粮','三只眼睛')

print(小黑.__dict__)
print(小白.__dict__)

# {'name': '小白', 'food': '猫粮', 'blood': 100, 'waise': 100, 'eyes': '三只眼睛'}
# {'name': '小白', 

单继承

# 单继承  不管有几个儿子  都是单继承
class D:
    def func(self):
        print("in D")
class A(D):pass
class B(A):
    def func(self):
        print('in B')
class C(B):pass
C().func()

# in B

class D:
    def func(self):
        print("in D")
class A(D):pass
class B(A):pass
class C(B):pass

C().func()

# in D

多继承

# # 多继承 有好几个爹
#
# 有些语言不支持多继承 java
# python语言特点 可以在面向对象中支持多继承


class B:
    def funv(self):print('IN B ')
class A:
    def funv(self):print('IN A ')

class C(A,B):  #  谁在前 就执行谁   A 在前
    pass

C().funv()
# IN A

class C(B,A):   #  谁在前 就执行谁  B在前
    pass

C().funv()
# IN B
#

bases

# bases 只显示父类  不显示更上一级的类

class A :pass
print(A.__bases__)

# (<class 'object'>,)

class C :pass
class B(A,C) :pass

print(B.__bases__)

#
# (<class '__main__.A'>, <class '__main__.C'>)

类的补充

二:特殊的类属性
类名.__name__# 类的名字(字符串)
类名.__doc__# 类的文档字符串
类名.__base__# 类的第一个父类(在讲继承时会讲)
类名.__bases__# 类所有父类构成的元组(在讲继承时会讲)
类名.__dict__# 类的字典属性
类名.__module__# 类定义所在的模块
类名.__class__# 实例对应的类(仅新式类中)

补充

# 所有在python3中的类都是继承  object类
#
# object 中有 init
# 所有类都默认继承object

class A :
    pass    #即便什么都不写  也不会报错

# 等于

# class A (object):  #  规范写法
#     pass

a=A()
a=A()
# 开空间,调用init


# bases 只显示父类  不显示更上一级的类

class A :pass
print(A.__bases__)

# (<class 'object'>,)

class C :pass
class B(A,C) :pass

print(B.__bases__)

#
# (<class '__main__.A'>, <class '__main__.C'>)

封装

多态

进阶

第二十四天

原文:https://www.cnblogs.com/xueba/p/12466691.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!