@SuHongjun
2020-05-21T10:00:42.000000Z
字数 2119
阅读 180
Python 2020春季学期
class Person( ):cat = '灵长类'planet = '地球'def __init__(self,name,age=0,gender='unknown'):self.name = nameself.age = ageself.gender = genderdef say_hi(self):print('Hi')class American(Person):passclass Chinese(Person):pass
class A():def say_hi(self):print("I am A")class B():def say_hi(self):print("I am B")class C(A,B): #多继承pass>>> c=C()>>> c.say_hi()I am A
虽然 Python 在语法上支持多继承,但多继承的情况比较复杂,初学者不容易掌握。
多继承容易让代码逻辑复杂、思路混乱,一直备受争议,中小型项目中较少使用,后来的 Java、C#、PHP 等干脆取消了多继承。
使用多继承经常需要面临的问题是,多个父类中包含同名的类方法。对于这种情况,Python 的处置措施是:根据子类继承多个父类时这些父类的前后次序决定,即排在前面父类中的类方法会覆盖排在后面父类中的同名类方法。
逼不得已,建议大家不要使用多继承。
class American(Person):...class Chinese(Person):...class Chinese_man(Chinese):...class Chinese_woman(Chinese):...class Person( ):cat = '灵长类'planet = '地球'def __init__(self,name,age=0,gender='unknown'):self.name = nameself.age = ageself.gender = gendersalary = 5000def say_hi(self):print('Hi')class American(Person):country = 'USA'def say_hi(self):print("How are you?")class Chinese(Person):country = '中国'def say_hi(self):print("您好!")class OldKunMingPeople(Chinese):province = '云南'city = '昆明'def say_hi(self):print("你家,饭咯吃了?")
class Student(Person):def __init__(self,name,age=0,gender='unknown'):#Person.__init__(self,name,age,gender)super().__init__(name,age,gender)self.score = None #未作封装
简单的理解封装(Encapsulation),即在设计类时,刻意地将一些属性和方法隐藏在类的内部,这样在使用此类时,将无法直接以“类对象.属性名”(或者“类对象.方法名(参数)”)的形式调用这些属性(或方法),而只能用未隐藏的类方法间接操作这些隐藏的属性和方法。
封装的好处:
首先,封装机制保证了类内部数据结构的完整性,因为使用类的用户无法直接看到类中的数据结构,只能使用类允许公开的数据,很好地避免了外部对内部数据的影响,提高了程序的可维护性。
除此之外,对一个类实现良好的封装,用户只能借助暴露出来的类方法来访问数据,我们只需要在这些暴露的方法中加入适当的控制逻辑,即可轻松实现用户对类中属性或方法的不合理操作。
并且,对类进行良好的封装,还可以提高代码的复用性。
class Person( ):cat = '灵长类'planet = '地球'def __init__(self,name,age=0,gender='unknown'):self.name = nameself.age = ageself.gender = gendersalary = 5000def say_hi(self):print('Hi')#通过对 __score属性的封装,实现合法性检查class Student(Person):def __init__(self,name,age=0,gender='unknown'):super().__init__(name,age,gender)self.__score = None #封装、私有属性def get_score(self):return self.__scoredef set_score(self, mark):if 0<=mark<=100:self.__score = markelse:print("分数不合理,请重新设定分数!")
以小组进行,每个组最多3个人
题目:
...........?????