- 解释器:@property 和 xxx.setter的用法
class Person(object):
def __init__(self, name, age):
self._name = name
self._age = age
@property
def name(self):
return self._name
@property
def age(self):
return self._age
@age.setter
def age(self, age):
self._age = age
def play(self):
if self._age <= 16:
print('%s正在玩飞行棋.' % self._name)
else:
print('%s正在玩斗地主.' % self._name)
def main():
person = Person('王大锤', 12)
person.play()
person.age = 22
person.play()
if __name__ == '__main__':
main()
'''
王大锤正在玩飞行棋.
王大锤正在玩斗地主.
'''
'''
这是继承
'''
class Person(object):
"""人"""
def __init__(self, name, age):
self._name = name
self._age = age
@property
def name(self):
return self._name
@property
def age(self):
return self._age
@age.setter
def age(self, age):
self._age = age
def play(self):
print('%s正在愉快的玩耍.' % self._name)
def watch_av(self):
if self._age >= 18:
print('%s正在观看爱情动作片.' % self._name)
else:
print('%s只能观看《熊出没》.' % self._name)
class Student(Person):
"""学生"""
def __init__(self, name, age, grade):
super().__init__(name, age)
self._grade = grade
@property
def grade(self):
return self._grade
@grade.setter
def grade(self, grade):
self._grade = grade
def study(self, course):
print('%s的%s正在学习%s.' % (self._grade, self._name, course))
class Teacher(Person):
"""老师"""
def __init__(self, name, age, title):
super().__init__(name, age)
self._title = title
@property
def title(self):
return self._title
@title.setter
def title(self, title):
self._title = title
def teach(self, course):
print('%s%s正在讲%s.' % (self._name, self._title, course))
def main():
stu = Student('王大锤', 15, '初三')
stu.study('数学')
stu.watch_av()
t = Teacher('骆昊', 38, '老叫兽')
t.teach('Python程序设计')
t.watch_av()
if __name__ == '__main__':
main()
'''
这是多态
'''
from abc import ABCMeta, abstractmethod
class Pet(object, metaclass=ABCMeta):
"""宠物"""
def __init__(self, nickname):
self._nickname = nickname
@abstractmethod
def make_voice(self):
"""发出声音"""
pass
class Dog(Pet):
"""狗"""
def make_voice(self):
print('%s: 汪汪汪...' % self._nickname)
class Cat(Pet):
"""猫"""
def make_voice(self):
print('%s: 喵...喵...' % self._nickname)
def main():
pets = [Dog('旺财'), Cat('凯蒂'), Dog('大黄')]
for pet in pets:
pet.make_voice()
if __name__ == '__main__':
main()
'''
practice 1:自己造的继承和多态的联系
2019年7月17日
Cute_Abacus
'''
from abc import ABCMeta, abstractmethod
class People(object):
def __init__(self, age = 0, gender = 0):
self._age = age
self._gender = gender
@property
def age(self):
return self._age
@property
def gender(self):
return self._gender
@age.setter
def age(self,age):
self._age=age
@abstractmethod
def paly(self):
pass
class Student(People):
def __init__(self, age = 0, gender = 0, grade = 0 ):
super().__init__(age, gender)
self._grade = grade
@property
def grade(self):
return self._grade
@grade.setter
def grade(self,grade):
self._grade = grade
def paly(self):
return 'is doing home work'
def main():
pe=People(16,1)
st=Student(18,0,95)
print(pe.gender)
print(str(st.age)+' 的 ta '+ st.paly())
if __name__ =='__main__':
main()
'''
1
18 的 ta is doing home work
'''