首页 > 编程语言 >面向对象编程(二)

面向对象编程(二)

时间:2022-11-03 16:00:12浏览次数:48  
标签:obj name 继承 面向对象编程 print 父类 class

面向对象编程(二)

一、动静态方法

什么是动静态?
 动态就是绑定给对象的方法直接在类体代码中编写即可,对象调用会自动将对象当做第一个参数传入,类调用有几个形参就传几个实参;静态方法就是普通的函数
代码实现:
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.继承的含义
  继承就是让类继承了另外一个类转变为父子关系,子类可以直接访问父类的静态方法和属性,在python中,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类。
3.继承的目的
   可以减少代码编写
    减少代码的冗余
    提高重复使用率
4.继承的操作
   定义:
      class 类名(父类名):
            pass
    定义类的时候类名后面加客户
    括号内填写你需要继承的类名
    括号内可以填写多个父类,用逗号隔开
# 定义父类
class Father():
    name = 'daddy'
# 定义子类,继承父类
class Son(Father):
    pass

# 3. 创建子类对象,并调用其继承到的属性和方法
obj = Son()
print(obj.name)

三、继承的本质

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

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

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

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

2.单继承情况下的名字查找顺序

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()方法可以直接获取名字的查找顺序

五、经典类与新式类

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

六、派生方法

子类基于父类某个方法做了扩展

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)

标签:obj,name,继承,面向对象编程,print,父类,class
From: https://www.cnblogs.com/zx0524/p/16854757.html

相关文章

  • 面向对象编程
    内容概要面对对象核心思路编程思想面向对象之类与对象类与对象的创建对象独有的数据(属性)对象独有的功能(方法)面对对象核心思路我们如果没有对象的存在,我们有一些......
  • 面向对象编程
    面向对象编程一、面向对象之人狗大战'''推导思路:1.代码定义出人和狗2.将产生人和狗的字典封装成函数3.定义人打狗的动作,和狗咬人的动作(生命值=攻击力-生命值)4.解......
  • 面向对象编程
    1.对象Object对象的两个部分:属性、行为面向对象编程的三大特点:封装、继承、多态2.封装写程序的时候也可以采用封装的理念,对于一些内容我们不提供接口来使用它们,它们属......
  • 05面向对象编程
    对象的创建分析//面向对象编程本质:以类的方式组织代码,以对象的组织(封装)数据面向对象三大特性抽象类和接口内部类及OOP实战......
  • 面向对象编程
    面向对象编程以类的方式组织代码,以对象的组织(封装)数据封装、继承、多态修饰符返回值类型方法名(...){方法体返回值}方法的调用静态方法static非静态方法......
  • Python进阶篇04-面向对象编程
    面向对象编程面向对象编程和面向过程编程的区别:类和实例类:抽象的、用于创建实例的基础模板,类里面可以定义这个类所拥有的基础的属性。实例:根据类而创建的具体的对象,实......
  • 面向对象编程 封装继承
    访问修饰符访问修饰符访问级别public公有地,外部可以访问protected受保护的,只有本类和派生类才能够访问private私有的,只有本类中可以访问封装字段......
  • 初始面向对象编程
    OOP面向对象编程类的结构classStudent{}类与对象classProgram{//主方法(程序入口)staticvoidMain(string[]args){//张三是Student实例......
  • 深入理解python面向对象编程(python基础语法004)
    ......
  • 面向对象编程
    面向对象编程包语法packagecom.pac1.pac2.pac3packagecompackagepac1{packagepac2{packagepac3{objectScalaPackage{......