• 目录
    • 对象的独有功能
    • 动静态方法
    • 面向对象的特征
      • 面向对象的的三大特征
      • 继承的本质
      • 不继承的名字查找顺序
      • 单继承的名字查找顺序
      • 多继承的名字查找顺序
    • 经典类与新式类
    • 派生方法
  • 对象的独有功能

   1.定义:绑定在类中的函数(每个被类创造出的对象所使用类中的方法从而获得不同数据)

class Computer:
    name = '电脑'

    def price(self, model):
        print(f'{model}电脑便宜出售')


com1 = Computer()
com2 = Computer()
com1.price('联想')  # 联想电脑便宜出售
com2.price('苹果')  # 苹果电脑便宜出售
  • 动静态方法

   1.绑定给对象的方法,直接在类体代码中编写即可,对象调用会自动将对象当做第一个参数传入

   2.绑定给类的方法类 调用则有几个形参就传几个实参

   3.静态方法(普通函数)

class Computer:
    name = '电脑'

    def price(self, model):
        print(f'{model}电脑便宜出售{self}')    # self <__main__.Computer object at 0x0000015A98BBE048>

    @classmethod
    def func(cls, type):
        print(f'{type}电脑性能很好{cls}')      # cls <class '__main__.Computer'>

    @staticmethod
    def exterior(type):
        print(f'{type}电脑外观好看')


com1 = Computer()
com2 = Computer()
com1.price('联想')                # 联想电脑便宜出售
com2.price('苹果')                # 苹果电脑便宜出售
Computer.price(com1, '联想')      # 联想电脑便宜出售<__main__.Computer object at 0x000001F638F2E048>
com1.func('笔记本')               # 联想电脑性能很好<class '__main__.Computer'>
Computer.func('笔记本')           # 联想电脑性能很好<class '__main__.Computer'>
com1.exterior('笔记本')           # 联想电脑外观好看
Computer.exterior('笔记本')       # 联想电脑外观好看
  • 类的三大特征之继承

   1.类的三大特征:

    1.1 继承

    1.2 封装

    1.3 多态

 

 

    2.继承的本质:获得别的类的属性(数据与功能)之间的关系称为父类、基类或超类与子类、派生类

    2.1 对象:数据和功能的结合体

    2.2 类:多个对象相同的数据和功能的结合体

    2.3 父类:多个类相同的数据和功能的结合体

      类和父类最主要的功能其实就是节省代码

class School:
    name = '华清大学'

    def education(self, name):
        print(f'{name}授课')


class Student(School):
    major = '摄影专业'

    def __init__(self, hobby):
        self.hobby = hobby


print(Student.name)  # 华清大学
stu1 = Student(School)
Student.education(stu1, '李老师')  # 李老师授课
stu2 = School()
School.education(stu2, '李老师')   # 李老师授课
Student.education(stu2, '李老师')  # 李老师授课

   3.类不继承的名字查找顺序:对象先查找自身名称空间、自身没有再查找创造对象的类的名称空间、都无报错 (自身>>>类)

class School:
    name = '华清大学'       # 2

    def major(self, name):
        print(f'{name}')


stu1 = School() 
stu1.name = '摄影专业'       # 1
print(stu1.name)        # 摄影专业   

stu1 = School()
print(stu1.name)        # 华清大学

   4.类单继承的名字查找顺序:对象先查找自身名称空间、自身没有再查找创造对象的类的名称空间,再无查找继承的父类的名称空间、都无报错(自身>>>类>>>父类)

class School:
    name = '华清大学'      # 3

class Student(School):
    # name = '摄影一班'    # 2

    def major(self, name):
        print(f'{name}')

stu1 = Student()
stu1.name = '摄影专业'     # 1
print(stu1.name)        # 摄影专业


stu1 = Student()
print(stu1.name)        # 摄影一班


stu1 = Student()
print(stu1.name)        # 华清大学

   

   5.类多继承的名字查找:

    5.1 每个分支最后继承的类没有共同继承的类:自身>>>类>>>每个分支一层一层父类

class School1:
    # name = '华清大学'        # 4
    pass

class School2:
    # name = '宜荷大学'        # 6
    pass

class School3:                # 8
    # name = '南芜大学'
    pass

class Major1(School1):
    # name = '摄影专业'         # 3
    pass

class Major2(School2):
    # name = '绘画专业'          # 5
    pass

class Major3(School3):
    # name = '多媒体专业'         # 7
    pass

class Student(Major1, Major2, Major3):
    # name = '摄影一班'           # 2

    def grade(self, name):
        print(f'{name}')

stu1 = Student()
# stu1.name = '大三'              # 1
print(stu1.name)

  

    5.2   每个分支最后继承的类有共同继承的类:自身>>>类>>>每个分支一层一层父类>>>共同继承的类

class Country:
    name = '中国'              # 9
    pass

class School1(Country): # name = '华清大学' # 4 pass class School2(Country): # name = '宜荷大学' # 6 pass class School3(Country): # 8 # name = '南芜大学' pass class Major1(School1): # name = '摄影专业' # 3 pass class Major2(School2): # name = '绘画专业' # 5 pass class Major3(School3): # name = '多媒体专业' # 7 pass class Student(Major1, Major2, Major3): # name = '摄影一班' # 2 def grade(self, name): print(f'{name}') stu1 = Student() # stu1.name = '大三' # 1 print(stu1.name)

  • 经典类与新式类

   1.经典类:python2环境中无法直接继承object祖先辈类,所以需要手动继承,不然很多功能无法使用

   2.新式类:python3环境中默认直接继承object祖先辈类,所以无需手动继承,但为防止可能会切换python2环境,所以建议加object类

class School:
    name = '华清大学'
    print(f'{name}')

print(School.__base__)     # class 'object'>


class School(object):
    name = '华清大学'
    print(f'{name}')

print(School.__base__)     # class 'object'>
  • 派生方法:在子类中定义父类的功能并增加功能
class School:
    name = '华清大学'

    def __init__(self, rank):
        self.rank = rank


class Student(School):
    def __init__(self, rank, major):
        School.__init__(self, rank)
        # super.__init__(rank)
        self.major = major


stu1 = Student('排名第一', '摄影专业')
print(stu1.__dict__)      # {'rank': '排名第一', 'major': '摄影专业'}
print(stu1.rank)          # 排名第一


class School(list):
    def append(self, value):
        # if value == '清水高中':
        #     return
        super().append(value)

sch1 = School()
sch1.append('南芜大学')
print(sch1)              # ['南芜大学']
sch1.append('清水高中')    # ['南芜大学']
print(sch1)
sch1.append('宜荷大学')
print(sch1)              # ['南芜大学', '宜荷大学'

 

 posted on 2022-07-27 21:57  拾荒菇凉  阅读(120)  评论(0)    收藏  举报