动静态方法,面向对象的继承

动静态方法

复制代码
class Student:
school_name = 'kfc疯狂星期四'
# 1.默认绑给对象,类调用有几个参数传几个,对象调用第一个参数传入对象自身

def func1(self): # 绑定给对象的方法
print('你可以请我吃吗')

# 2.默认绑给类,类调用第一个参数是类自身,对象调用会将产生此对象得类作为第一个参数传入
@classmethod # 绑定给类的方法
def func2(cls):
print('香辣鸡腿堡一个9.9',cls)

# 3.普通的函数,无论是类还是对象调用,都必须要自己手动传参
@staticmethod # 静态方法
def func3(a):
print('8选2仅需28元',a)

obj = Student()
obj.func1()
obj.func2()
obj.func3('a')
Student.func1(123)
Student.func2()
Student.func3(123)

结果:

   你可以请我吃吗
   香辣鸡腿堡一个9.9 <class '__main__.Student'>
   8选2仅需28元 a
   你可以请我吃吗
   香辣鸡腿堡一个9.9 <class '__main__.Student'>
   8选2仅需28元 123



复制代码

继承的概念

    面向对象三大特性(封装(核心),继承,多态)

复制代码
1.继承的含义
表示类与类之间的资源的从属关系
     eg:类A继承类B

2.继承的目的
为了让类A拥有的类B的所有数据与方法的使用权限

3.继承的操作:
class 类名(父类名1,父类名2):
    pass
     # python支持多继承,有逗号隔开,顺序从前往后

4.类的继承关系
   继承类的类:  子类,派生类
   被继承的类:  父类,基类,超类

5.继承的本质
   对象:数据和功能的结合体
   子类:多个对象相同数据和功能的结合体
   父类:多个子类相同数据和功能的结合体
ps:类与父类本质都是为了节省代码
    继承本质分为两部分(非重点):
    抽象:将多个类相同的东西抽出去形成一个新的类
     继承:将多个类继承刚刚抽取出来的新的类
复制代码

名字的查找顺序

复制代码
1.不继承情况下名字查找顺序
    obj = 类名()
    odj.(名字/方法)

    # 对象查找名字的顺序
    对象自己的名称空间查找   >>>   产生该对象的类中查找
    # 1.如果类中没有直接报错

2.单继承情况下名字查找顺序
    对象自身   >>>   产生对象的类     >>>    父类
    eg:对象点名字,永远从对象自身开始一步步查找,看到self搞清self代表哪个对象

3.多继承情况下名字查找顺序
    对象自身   >>>   产生对象的类     >>>    父类(从左往右)
    # 1.菱形继承: 广度优先(最后才会找闭环的定点)
    # 2.非菱形继承: 深度优先(从左往右每条道走完为止)
    ps:mro()方法可以直接获取名字的查找顺序
    
复制代码

经典类与新式类

经典类:不继承object或者其子类的类
新式类:继承object或者其子类的类

主要表现在python2与python3中
    在python2中有经典类和新式类  # class 类名: 不继承任何类
    在python3中只有新式类           # 所有类默认都继承object)

ps:以后我们在定义类的时候 如果没有其他明确的父类 也可能习惯写object兼容

派生方法

复制代码
派生: 子类基于父类的某个方法做了扩展

# 父类
class Person:
     def __init__(self, name, age, gender):
        self.name = name
        self.age = age
        self.gender = gender

# 子类     super() :可以在子类中调用父类的方法
class Student(Person):
    def __init__(self, name, age, gender, sid):
        super().__init__(name, age, gender)  # 子类调用父类的方法
        self.sid = sid


# 子类
class Teacher(Person):
    def __init__(self, name, age, gender, level):
        super().__init__(name, age, gender)
        self.level = level


stu1 = Student('jason', 18, 'male', 666)
print(stu1.__dict__)
tea1 = Teacher('tony', 28, 'female', 99)
print(tea1.__dict__)
复制代码

 

posted @   橘子菌菌n  阅读(83)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示