面向对象编程(二)

1|0面向对象编程(二)

1|1一、动静态方法

什么是动静态? 动态就是绑定给对象的方法直接在类体代码中编写即可,对象调用会自动将对象当做第一个参数传入,类调用有几个形参就传几个实参;静态方法就是普通的函数
代码实现: class Person: type = '动物' def Monkey(self): # 给对象绑定数据,self用于接收对象 print('一只猴子', self) @classmethod # 给类绑定方法,cls用于接收类 def duck(cls): print('一只小黄鸭', cls) @staticmethod # 被@staticmethod修饰的方法,就是静态方法 def chicken(a, b): # 按照普通函数传参方式 print('一只火鸡') stu1 = Person() Person.duck() # 类调用会自动将类当做第一个参数传入 stu1.duck() # 对象调用会自动将产生该对象的类当做第一个参数传入 Person.chicken(1, 2)

image

1|2二、面向对象三大特征之继承

1.面向对象三大特征 继承 封装 多态 2.继承的含义 继承就是让类继承了另外一个类转变为父子关系,子类可以直接访问父类的静态方法和属性,在python中,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类。 3.继承的目的 可以减少代码编写 减少代码的冗余 提高重复使用率 4.继承的操作 定义: class 类名(父类名): pass 定义类的时候类名后面加客户 括号内填写你需要继承的类名 括号内可以填写多个父类,用逗号隔开
# 定义父类 class Father(): name = 'daddy' # 定义子类,继承父类 class Son(Father): pass # 3. 创建子类对象,并调用其继承到的属性和方法 obj = Son() print(obj.name)

1|3三、继承的本质

1.对象:数据和功能的结合体 2.类:多个对象相同的数据和功能的结合体 3.父类:多个类相同数据和功能的结合体 4.抽象:把多个类公共的数据或功能那出来形成一个基类 5.继承:从上往下获取每个基类中的资源 类与父类的本质都是为了节省代码

1|4四、数据和方法的查找顺序

1|01.不继承父类的情况下名字的查找顺序

class Son(): name = 'one' obj = Son() print(obj.name) # one 对象自身 ---->>类

1|02.单继承情况下的名字查找顺序

class Father(): name = 'father' class Son(): # name = 'one' obj = Son() print(obj.name) # father 对象自身 ----> 类 ---->继承的父类

3.多继承的情况下名字查找顺序

class D(): name = 'D' class C(): name = 'C' class B(): name = 'B' class A(C): # name = 'A' pass obj = A() print(obj.name) 顺序:A->B C->D 非菱形继承深度优先 每个分支走到底,再切换
图片名称
class E(): name = 'E' class D(E): name = 'D' class C(D): name = 'C' class B(E): name = 'B' class A(B): # name = 'A' pass obj = A() print(obj.name) 顺序:A->B C->D->E 菱形继承深度优先 (前面几个分支都不会走最后一个类 最后一个分支才会走) 当实在搞不清的时候可以用类点mro()方法查看该类产生的对象名字的查找顺序
图片名称
总结: 菱形继承 广度优先(最后才会找闭环的定点) 非菱形继承 深度优先(从左往右每条道走完为止) ps:mro()方法可以直接获取名字的查找顺序

1|5五、经典类与新式类

经典类:不继承object或者其子类的类 新式类:继承object或者其子类的类 1.Python2解释器中有经典和新式类 2.Python3解释器中只有新式类,所有的类默认都会继承object

1|6六、派生方法

子类基于父类某个方法做了扩展 class Person: def __init__(self, name, age, gender): self.name = name self.age = age self.gender = gender 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__) class MyList(list): def append(self, values): if values == 'jason': print('jason不能尾部追加') return super().append(values) obj = MyList() print(obj, type(obj)) obj.append(111) obj.append(222) obj.append(333) obj.append('jason') print(obj)

__EOF__

本文作者泡芙有点甜
本文链接https://www.cnblogs.com/zx0524/p/16854757.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   小王应该在学习!  阅读(26)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示