案例31
测试@property的最简化的使用
效果如图
源码如下:
#测试@property的最简化的使用
class Employee:
@property
def salary(self):
print("salary run...")
return 10000
emp1 = Employee()
#emp1.salary()
print(emp1.salary)
案例32
测试@property装饰器的用法
效果如图
源码如下:
#@property装饰器的用法
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 1000<salary<50000:
self.__salary = salary
else:
print("录入错误!薪水在1000--50000这个范围")
'''
def get_salary(self):
return self.__salary
def set_salary(self,salary):
if 1000<salary<50000:
self.__salary = salary
else:
print("录入错误!薪水在1000--50000这个范围")
'''
emp1 = Employee("高淇",30000)
#print(emp1.get_salary())
#emp1.set_salary(2000)
#print(emp1.get_salary())
print(emp1.salary)
emp1.salary = 2000
print(emp1.salary)
案例33
测试继承的基本使用
效果如图
源码如下:
#测试继承的基本使用
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
#Student-->Person-->object类
print(Student.mro())
s = Student("高淇",18,60)
s.say_age()
print(s.name)
#print(s.age)
print(dir(s))
print(s._Person__age)
案例34
测试方法的重写
效果如图
源码如下:
#测试方法的重写
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,80)
s.say_age()
s.say_introduce()
案例35
测试mro()方法解析顺序
效果如图
源码如下:
#测试mro()方法解析顺序
class A:
def aa(self):
print("aa")
def say(self):
print("say AAA!")
class B:
def bb(self):
print("bb")
def say(self):
print("say BBB!")
class C(B,A):
def cc(self):
print("cc")
c = C()
print(C.mro()) #打印类的层次结构
c.say() #解释器寻找方法是“从左到右”的方式寻找,此时会执行B类中的say()
案例36
测试重写object的__str__()
效果如图
源码如下:
#测试重写object的__str__()
class Person: #默认继承object类
def __init__(self,name):
self.name = name
def __str__(self):
return "名字是:{0}".format(self.name)
p = Person("高淇")
print(p)
案例37
测试super(),代表父类的定义,而不是父类的对象
效果如图
源码如下:
#测试super(),代表父类的定义,而不是父类的对象
class A:
def say(self):
print("A:",self)
class B(A):
def say(self):
#A.say(self)
super().say()
print("B:",self)
B().say()
案例38
测试特殊属性
效果如图
源码如下:
#测试特殊属性
class A:
pass
class B:
pass
class C(B,A):
def __init__(self,nn):
self.nn = nn
def cc(self):
print("cc")
c = C(3)
print(dir(c))
print(c.__dict__)
print(c.__class__)
print(C.__bases__)
print(C.mro())
print(A.__subclasses__())
案例39
测试多态组合参数
效果如图
源码如下:
#多态
class Man:
def eat(self):
print("饿了,吃饭啦!")
class Chinese(Man):
def eat(self):
print("中国人用筷子吃饭")
class English(Man):
def eat(self):
print("英国人用叉子吃饭")
class Indian(Man):
def eat(self):
print("印度人用右手吃饭")
def manEat(m):
if isinstance(m,Man):
m.eat() #多态。一个方法调用,根据对象不同调用不同的方法!
else:
print("不能吃饭")
manEat(Chinese())
manEat(English())
案例40
测试运算符的重载
效果如图
源码如下:
#测试运算符的重载
class Person:
def __init__(self,name):
self.name = name
def __add__(self, other):
if isinstance(other,Person):
return "{0}--{1}".format(self.name,other.name)
else:
return "不是同类对象,不能相加"
def __mul__(self, other):
if isinstance(other,int):
return self.name*other
else:
return "不是同类对象,不能相乘"
p1 = Person("高淇")
p2 = Person("高希希")
x = p1 + p2
print(x)
print(p1*3)