面向对象之动静态方法
@classmethod
@staticmethod
在类中的动态方法:
class 类名:
name = '倚天屠龙记'
def func1 ( self) :
print ( '屠龙刀牛逼' )
@classmethod
def func2 ( cls) :
print ( '倚天一出谁与争锋' )
在类中的静态方法:
@staticmethod
def func3 ( a) :
print ( '张无忌牛逼' )
obj = 类名( )
obj. func1( )
类名. func1( 123 )
ojb = Dragon( )
Dragon. func2( )
ojb. func2( )
ojb. func3( )
Dragon. func3( )
面向对象之继承的概念
'''
面向对象的三大特性 :封装 继承 多态
三者中 继承 最为核心,因为实际工作中运用次数最多,体验感也是最强
封装和多态略微抽象
'''
1. 继承的含义
在现实生活中继承表示人与人之间资源的从属关系
eg: 儿子继承父亲
在编程世界中继承表示类与类之间资源的从属关系
eg: 类A继承类B
2. 继承的目的
在现实生活中儿子继承父亲就拥有了父亲所有资源的支配权限
在编程世界中类A继承类B就拥有了类B中所有的数据和方法使用权限
3. 继承的实操
class Son ( Father) :
pass
class a ( b, c, d, e, f) :
pass
'''
1,继承其他类的类 叫做 子类 或者 派生类
一般都叫子类 子类可以拥有父类的所有公共数据和方法
2.被继承的类叫做 父类 或者 超类
一般都叫父类
'''
继承的本质
"""
对象:数据与功能的结合体
类(子类):多个对象相同数据和功能的结合体
父类:多个类(子类)相同数据和功能结合体
ps:类与父类本质都是为了节省代码
"""
继承本质应该分为两部分
抽象: 将多个类相同的东西抽出去形成一个新的类
继承: 将多个类继承刚刚抽取出来的新的类
重点记忆 抽象 和 继承 的概念
变量名的查找顺序
无继承和单继承
1. 在没有继承的情况下
class A1 :
name = '张无忌'
def func ( self) :
print ( '来自张无忌' )
obj = A1( )
obj. name = '赵敏'
print ( A1. name)
print ( obj. name)
"""
对象查找名字的顺序
1.先从自己的名称空间中查找,谁调用的先找谁里面有没有
2.自己没有再去产生该对象的类中查找
3.如果类中也没有 那么直接报错
对象自身 >>> 产生对象的类
"""
2. 在单继承的情况下
class A :
name = '张翠山'
class A1 ( A) :
pass
obj = A1( )
obj. name = '赵敏'
print ( A1. name)
print ( obj. name)
''' 对象自身 >>>> 产生对象的类 >>> 类的父类 >>> 父类的父类
从内而外 层层寻找 优先找自身
'''
class A1 :
def func1 ( self) :
print ( 'from A1 func1' )
def func2 ( self) :
print ( 'from A1 func2' )
self. func1( )
class B1 ( A1) :
def func1 ( self) :
print ( 'from B1 func1' )
obj = B1( )
obj. func2( )
'''
使用 对象.名字的方法,永远都是从对象自身开始一步步查找的
self指代的就是一个对象,一定要搞清楚 self指代的是哪个对象
'''
多继承查找顺序
class G :
name = 'from G'
pass
class A :
pass
class B :
pass
class C :
pass
class D ( A) :
pass
class E ( B) :
pass
class F ( C) :
pass
class S1 ( D, E, F) :
pass
obj = S1( )
对象自身 >> > 产生对象的类 >> > 父类( 从左往右)
3. 多继承情况下名字的查找顺序
'''
菱形继承
广度优先(最后才会找闭环的定点)
非菱形继承
深度优先(从左往右每条道走完为止)
ps:mro()方法可以直接获取名字的查找顺序
'''
经典类与新式类
经典类:不继承object 或者其子类的类
新式类: 继承object 或者其子类的类
在python2中有经典类和新式类
在python3中只有新式类( 所有类默认都继承object )
现在基本都是python3了
这也是python2与python3的区别
python3中 所有的类都默认带有 object
Python2中 需要手动加上 object
class A1 ( object ) :
pass
派生方法
派生方法就是子类基于父类某个方法做的扩展
关键词 super ( )
class Person :
def __init__ ( self, name, age)
self. name = name
self. age = age
class Student ( Person) :
def __init__ ( self, name, age, gender)
super ( ) . __init__( name, age)
self. sid = sid
class Teacher ( Person) :
def __init__ ( self, name, age, level)
super ( ) . __init__( name, age)
self. level = level
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了