文章目录
- 1.@property装饰器
- 2.面向对象三大特征介绍
- 3.继承
- 4.类成员的继承和重写
- 5.查看类的继承层次结构
- 6.重写_str_()方法
- 7.多重继承
- 8.MRO()
- 9.super()获取父类定义
- 10.多态
前言:接下来可能会停更几天,因为要期末考试了,很忙,但是每天还是会写一点,共勉
1.@property装饰器
# 最简化的使用
class Employee:
def salary(self):
print("salary running")
return 10000
emp1 = Employee()
# emp1.salary()
print(emp1.salary)
@property装饰器的用法
class Employee:
def __init__(self,name,salary):
self.name =name
self.salary = salary
def get_salary(self):
return self._salary
def set_salary(self,salary):
if 10000<salary<80000:
self._salary = salary
else:
print("录入错误!薪水在10000-80000这个范围")
emp1 = Employee("汤小一",50000)
print(emp1.get_salary)
emp1.set_salary(20000)
print(emp1.get_salary())
代码段:
class Employee:
def __init__(self, name, salary):
self._name = name
self._salary = salary
@property
def salary(self):
return self._salary
@salary.setter
def salary(self, salary):
if 10000 < salary < 80000:
self._salary = salary
else:
print("录入错误!薪水在10000-80000这个范围")
emp1 = Employee("汤小一", 50000)
print(emp1.salary)
emp1.salary = 20000
print(emp1.salary)
2.面向对象三大特征介绍
python是面向对象的语言,也支持面向对象编程的三大特性:继承、封装(隐藏)、多态。
3.继承
继承是面向对象程序设计的重要特征,也是实现“代码复用”的重要手段。 调用格式: class 子类类名(父类1[,父类2,...]): 类名
测试继承的基本使用
class Person:
def __init__(self, name, age):
self.name = name
self._age = age # 私有属性
def say_age(self):
print("年龄,年龄,我其实也不知道")
class Student(Person):
def __init__(self, name, age, score):
Person.__init__(self, name, age) # 必须显示的调用父类初始化方法,不然解释器不会调用
self.score = score
print(Student.mro())
s = Student('汤小一', 18, 60)
s.say_age()
print(s.name)
# print(s.age)
print(dir(s)) # 显示所有属性
print(s.__class__)
排列顺序:Student-->Person-->object类
4.类成员的继承和重写
1.成员继承:子类继承了父类除构造方法之外的所有成员。 2.方法重写:子类可以重新定义子类中的方法,这样就会覆盖父类的方法,也称为“重写”
class Person:
def __init__(self, name, age):
self.name = name
self._age = age # 私有属性
def say_age(self):
print("我的年龄:", self._age)
def say_introduce(self):
print("我的名字是{0}".format(self.name))
class Student(Person):
def __init__(self, name, age, score):
Person.__init__(self, name, age) # 必须显示的调用父类初始化方法,不然解释器不会调用
self.score = score
def say_introduce(self):
'''重写了父类的方法'''
print("我的名字是:{0}".format(self.name))
s = Student('汤小一', 18, 60)
s.say_age()
5.查看类的继承层次结构
通过类的方法mro()或者类的属性_mro_可以输出这个类的继承层次结构。
class A:pass
class B(A):pass
class C(B):pass
print(C.mro())
object类是所有类的父类,因此所有的类都有object类的属性和方法。 dir()查看对象属性
6.重写_str_()方法
用于返回一个对于"对象的描述",对于内置函数str()经常用于print()方法,可以查看对象的信息。_str_()可以重写
class Person: #默认继承object类
def __init__(self,name):
self.name = name
def __str__(self):
return "名字是:{0}".format(self.name)
p = Person("汤小一")
print(p)
7.多重继承
python支持多重继承,一个子类可以有多个“直接父类”。这样,就具备“多个父类”的特点。但是这样“类的整体层次”很复杂,尽量避免使用
8.MRO()
python支持多继承,如果父类中有相同名字的方法,在子类没有指定父类名时,解释器将“从左向右”按顺序搜索。
9.super()获取父类定义
#super()代表父类的定义,不是父类的对象。
class A:
def say(self):
print("A:",self)
class B(A):
def say(self):
super().say()#A.say(self)
print("B:",self)
B().say
10.多态
指同一个方法调用由于对象不同可能会产生不同的行为。 注意:1.多态是方法的多态,属性没有多态。2.多态的存在有2个必要条件:继承、方法重写。
class Man:
def walk(self):
print("用腿走路")
class Chinese(Man):
def walk(self):
print("中国人靠右行")
class English(Man):
def walk(self):
print("外国人靠左行")
def manWalk(m):
if isinstance(m,Man):
m.walk()
else:
print("不能")
manWalk(Chinese())