动静态方法,面向对象的继承
动静态方法
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__)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律