@SuHongjun
2020-05-21T10:00:42.000000Z
字数 2119
阅读 155
Python
2020春季学期
class Person( ):
cat = '灵长类'
planet = '地球'
def __init__(self,name,age=0,gender='unknown'):
self.name = name
self.age = age
self.gender = gender
def say_hi(self):
print('Hi')
class American(Person):
pass
class 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 = name
self.age = age
self.gender = gender
salary = 5000
def 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 = name
self.age = age
self.gender = gender
salary = 5000
def 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.__score
def set_score(self, mark):
if 0<=mark<=100:
self.__score = mark
else:
print("分数不合理,请重新设定分数!")
以小组进行,每个组最多3个人
题目:
...........?????