面向对象之组合、多态、以及内置函数及方法等相关内容-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('运行完毕...')

 

posted @ 2020-08-17 10:11  投降输一半!  阅读(149)  评论(0)    收藏  举报