zoukankan      html  css  js  c++  java
  • 面向对象之组合、多态、以及内置函数及方法等相关内容-27

    1.在子类派生的新方法中重用父类功能的方式二

    # 1在子类派生的新方法中重用父类的功能
    # 方式一:指名道姓地调用某一个类的函数
    # 特点:不依赖于继承关系
    #
    # class OldboyPeople:
    #     school = "oldboy"
    #     #             空对象,"艾利克斯",73,'male'
    #     def __init__(self,name,age,gender):
    #         self.name = name
    #         self.age = age
    #         self.gender = gender
    #
    #     def f1(self):
    #         print('1111111')
    #
    # class Student(OldboyPeople):
    #     #           空对象,"艾利克斯",73,'male',1001,"python全栈开放"
    #     def __init__(self,name,age,gender,stu_id,course):
    #         OldboyPeople.__init__(self,name,age,gender) # OldboyPeople.__init__(空对象,"艾利克斯",73,'male')
    #         self.stu_id = stu_id
    #         self.course = course
    #
    #
    #     def choose(self):
    #         print('%s 正在选课' %self.name)
    #
    #     def f1(self):
    #         OldboyPeople.f1(self)
    #         print("22222")
    #
    # stu1=Student("艾利克斯",73,'male',1001,"python全栈开放")
    # # tea1=Teacher("egon",18,'male',2000,10)
    #
    #
    # stu1.f1()



    # 2 在子类派生的新方法中重用父类功能的方式二
    # 方式一:调用super(自己的类名,self)会返回一个特殊的对象,super(自己的类名,self).属性,会参照属性查找发起的那个类的mro列表去它父类中查找属性
    # 特点:严格依赖于继承关系
    # class OldboyPeople:
    #     school = "oldboy"
    #     #             空对象,"艾利克斯",73,'male'
    #     def __init__(self,name,age,gender):
    #         self.name = name
    #         self.age = age
    #         self.gender = gender
    #
    #     def f1(self):
    #         print('1111111')
    #
    # class Student(OldboyPeople):
    #     def __init__(self,name,age,gender,stu_id,course):
    #         # OldboyPeople.__init__(self,name,age,gender) # OldboyPeople.__init__(空对象,"艾利克斯",73,'male')
    #         super(Student,self).__init__(name,age,gender)
    #         self.stu_id = stu_id
    #         self.course = course
    #
    #
    #     def choose(self):
    #         print('%s 正在选课' %self.name)
    #
    #     def f1(self):
    #         # OldboyPeople.f1(self)
    #         # super().f1()
    #         print("22222")
    #
    # # print(Student.mro())
    # stu1=Student("艾利克斯",73,'male',1001,"python全栈开放")
    # # print(stu1.__dict__)
    # stu1.f1()


    #3:
    # class A:
    #     def test(self):
    #         super().test()
    # class B:
    #     def test(self):
    #         print('from B')
    # class C(A,B):
    #     pass

    # c=C()
    # print(C.mro())
    # c.test()

    # obj=A()
    # obj.test()

    #4:
    class A:
       def test(self):
           print('A---->test')
           super().aaa()
    class B:
       def test(self):
           print('B---->test')

       def aaa(self):
           print('B---->aaa')

    class C(A,B):
       def aaa(self):
           print('C----->aaa')

    c=C()
    print(C.mro())
    c.test()
    """
    A---->test
    B---->aaa
    """

    2.组合

    # 组合:把另外一个类的对象赋值给当前对象的属性
    # 组合表达的是一种有的关系
    class Teacher:
       def __init__(self, name, age, gender, level):
           self.name = name
           self.age = age
           self.gender = gender
           self.level = level

       def tell(self):
           print("%s:%s" % (self.name, self.age))


    class Student:
       def __init__(self, name, age, gender):
           self.name = name
           self.age = age
           self.gender = gender


    class Course:
       def __init__(self, name, price, period):
           self.name = name
           self.price = price
           self.period = period

       def tell(self):
           print('<%s:%s:%s>' % (self.name, self.price, self.period))


    tea1 = Teacher("egon", 18, "male", 10)
    stu1 = Student("xxx", 19, "male")

    python = Course("python开放", 30000, "3mons")
    linux = Course("linux课程", 30000, "3mons")

    tea1.courses = [python,linux]
    stu1.course = python

    # tea,stu # 超级对象

    # stu1.course.tell()
    for course_obj in tea1.courses:
       course_obj.tell()

    3.多态

    """
    同一种事物有多种形态
    例如:动物这种事物有多种形态,如人狗猪
    特性: 我们可以在不考虑某一个对象具体类型的前提下,直接使用该对象
    """
    # 父类有的功能,子类一定有
    # import abc
    #
    # class Animal(metaclass=abc.ABCMeta):
    #     @abc.abstractmethod
    #     def speak(self):
    #         pass
    #
    #     @abc.abstractmethod
    #     def run(self):
    #         pass
    #
    # # Animal() # Animal的作用是用来制定标准的
    #
    # class People(Animal):
    #     def speak(self):
    #         print("啊啊啊啊")
    #
    #     def run(self):
    #         print("咻咻咻...")
    #
    # class Dog(Animal):
    #     def giao(self):
    #         print("汪汪汪")
    #
    # class Pig(Animal):
    #     def heheng(self):
    #         print("哼哼哼")

    # peo1=People()
    # d1=Dog()
    # p1=Pig()

    # peo1.jiao()
    # d1.giao()
    # p1.heheng()




    # peo1.speak()
    # d1.speak()
    # p1.speak()

    # def speak(animal):
    #     animal.speak()
    #
    # speak(peo1)
    # speak(d1)
    #
    # speak(p1)




    # 鸭子类型:duck
    # class People:
    #     def speak(self):
    #         print("啊啊啊啊")
    #
    #     def run(self):
    #         print("咻咻咻...")
    #
    # class Dog:
    #     def speak(self):
    #         print("汪汪汪")
    #
    #     def run(self):
    #         print("狂奔...")
    #
    # class Pig:
    #     def speak(self):
    #         print("哼哼")
    #
    #     def run(self):
    #         print("咣咣咣...")
    #
    #
    # peo1=People()
    # d1=Dog()
    # p1=Pig()


    # peo1.run()
    # d1.run()
    # p1.run()



    class Cpu:
      def read(self):
          pass

      def write(self):
          pass

    class Process:
      def read(self):
          pass

      def write(self):
          pass

    class Disk:
      def read(self):
          pass

      def write(self):
          pass

    4.一切皆为对象

    # 数据类型 == 类
    # x = 11 # x=int(11)
    # print(int)

    # class Foo:
    #     pass
    # print(Foo)

    x = [1,2,3]  # list([1,2,3])
    y = [111,222]  # list([1,2,3])
    # x.append(4)
    # y.append(3333)

    # list.append(x,4)
    # list.append(y,333)

    # print(x)
    # print(y)


    print(type(x))

    5.内置函数


    x = 111

    print(type(x) is int)

    print(isinstance(x,int))
    # 该对象是否属于这个类

    class Bar:
       pass

    class Foo(Bar):
       pass
    print(issubclass(Foo,Bar))
    # 该类是否属于另一个类的子类

    6.内置方法

    #  内置方法都是在满足某种条件下自动触发的
    # 1 __str__
    # class People:
    #     def __init__(self, name, age):
    #         self.name = name
    #         self.age = age
    #
    #     def __str__(self):
    #         # print('===>')
    #         return "<%s:%s>" %(self.name,self.age)
    #
    # obj = People("egon", 18)
    #
    # print(obj) # print(obj.__str__())


    # 2 __del__
    class People:
       def __init__(self, name, age,f):
           self.name = name
           self.age = age
           self.f = f

       def __del__(self):
           print('===>')
           # 回收资源
           self.f.close()

    obj = People("egon", 18,open("a.txt",'w',encoding='utf-8'))

    del obj
    # print('运行完毕...')

     

  • 相关阅读:
    oracle 分配表权限给用户的写法
    任务的一种写法:
    解决oracle 32位64位的问题
    设计模式学习
    Nginx 相关介绍
    (2) html 语义化
    (1)HTML5的常用新特性你必须知道
    less初学手记
    如何修改chrome记住密码后自动填充表单的黄色背景 ?
    HTML的水平居中和垂直居中解决方案
  • 原文地址:https://www.cnblogs.com/usherwang/p/13516049.html
Copyright © 2011-2022 走看看