Day26

今日总结

动态方法、静态方法

# 动态方法
    # 绑定给对象的方法
        class Student:
            def run(self):
                print(self)

        # 类调用绑定给对象的方法时有多少参数就需要传多少参数
        print(Student.run(1))  # 1  None
        # 对象调用绑定给对象的方法时会自动将对象当做第一个参数传入
        obj1 = Student()
        obj1.run()  # <__main__.Student object at 0x000002447426A6A0>

    # 绑定给类的方法
        class Student:
            @classmethod
            def study(cls):
                print(cls)

        # 类调用绑定给类的方法时自动将类当做第一个参数传入
        Student.study()  # <class '__main__.Student'>
        # 对象调用绑定给类的方法时不需要传参 产生该对象的类会第一个参数传入
        obj1 = Student()
        obj1.study()  # <class '__main__.Student'>
   
# 静态方法(定义在类中,并且使用 @staticmethod 修饰器修饰,没有 cls 和 self 参数限制)
    class Student:
        @staticmethod
        def speak(a):
            print(a)

    # 类调用静态方法:自己传值
    Student.speak(123)  # 123
    # 对象调用静态方法:自己传值
    obj1 = Student()
    obj1.speak(321)  # 321

面向对象之继承

'''
	面向对象三大特性-->继承*、封装、多态

	在面向对象中继承用来描述类与类之间的从属关系
		eg:类A继承了类B 那么类A就可以使用类B中所有的数据、功能等
	继承可以减少代码冗余,提高开发效率,并且支持多继承
	对象:数据与功能的结合体
	类:多个对象相同数据和功能的结合体
    父类:多个类相同数据和功能的结合体
'''
# 继承的语法结构
	class A(B):  
		pass
	# 被继承的类称为-->父类或者基类 继承别人的类称为-->子类或者派生类
    
# 继承与抽象
    抽象:由下往上提取相同特征
    继承:由上往下功能传承

名字的查找顺序

# 单继承情况
	从对象自己的名称空间中查找,没有择取产生对象的类中查找,如果也没有并且类有父类则到父类中查找 以此往复
    对象-->类-->类的父类
    
# 多继承情况
'''
	新式类:直接或者间接继承了object或者其子类的类
    经典类:不继承任何的类
	在python2中存在经典类与新式类,而在python3中只有新式类
	区别在于是否继承了一个默认的object类
	我们在定义类的时候会习惯性的写
    class MyClass(object):
        pass
    是为了兼容python2和python3
'''
# 非菱形继承的情况下(对象继承的父类不为其他类的子类)
    按照继承时从左往右依次查找
    A-->B-->c

:

# 非菱形继承的情况下(对象继承的父类为其他类的子类)
	父类中名字的查找顺序就是按照继承时从左往右依次查找
   	如果多个父类还有分类 那么遵循"深度优先"
  	A-->D-->B-->E-->C-->F

:

# 菱形继承的情况下
  	父类中名字的查找顺序就是按照继承时从左往右依次查找
   	如果多个父类还有分类 那么遵循"广度优先"
	A-->D-->B-->E-->C-->F-->M

:

# 上课的案例(做错了)
 经典案例
  	class A:
      def f1(self):
          print('from A.f1')
      def f2(self):
          print('from A.f2')
          self.f1()  
    class MyClass(A):
       def f1(self):
            print('from MyClass.f1')
    obj = MyClass()
    obj.f2()
    '''
    	from A.f2
	from MyClass.f1
    '''
  

派生类

class Person:
    def __init__(self,name,age,gender):
        self.name = name
        self.age = age
        self.gender = gender
        
class Teacher(Person):
    def __init__(self,name,age,gender,level,salary):
        super().__init__(name,age,gender)  
        # super(Teacher,self).__init__(name,age,gender) 上面是简写
        self.level = level
        self.salary = salary     
        
class Student(Person):
    def __init__(self,name,age,gender,stu_id,class_id):
        super().__init__(name, age, gender)
        # super(Teacher,self).__init__(name,age,gender) 上面是简写
        self.stu_id = stu_id
        self.class_id = class_id
        
# 子类继承父类后如果需要扩展可以使用super关键字,这样的子类就叫派生类,本质其实还是子类

明天又是周五了,大作业

:

posted @ 2022-04-07 22:18  有梦想的阿九  阅读(37)  评论(0)    收藏  举报