python类和对象

xiaoxiao2021-02-28  124

#第六章对象和类 #使用class定义类 class person(): def __init__(self,name): self.name = name hunter = person('elmer fuud') print('the mighty hunter:',hunter.name) #在person内部,可以直接通过self.name访问name特性,而创建了一个实际对象后,需要通过hunter.name来访问 #继承 class car(): def exclaim(self): print("I'm a car!") class yugo(car): pass give_me_a_car = car() #为每个类创建对象 give_me_a_yugo = yugo() give_me_a_car.exclaim() give_me_a_yugo.exclaim() #没有进行任何操作,yugo自动从car那里继承了exclaim()方法 #覆盖方法 class car(): def exclaim(self): print("Iim a car") class yugo(car): def exclaim(self): print("I'm a yugo!much like a car,but not a car.") give_me_a_car = car() #为每个类创建一个对象 give_me_a_yugo = yugo() give_me_a_car.exclaim() give_me_a_yugo.exclaim() class person(): def __init__(self,name): self.name = name class MDPerson(person): def __init__(self,name): self.name = "Doctor" + name class JDPerson(person): def __init__(self,name): self.name = "Esquire" + name person = person('Fuud') doctor = MDPerson('Fudd') lawyer = JDPerson("Fudd") print(person.name) print(doctor.name) print(lawyer.name) #添加新的方法 class car(): def exclaim(self): print("I'm a car") class yugo(car): def exclaim(self): print("I,m a yugo!Mucg kike a car,but more yugo_ish") def need_a_push(self): print("A little help here") give_me_a_car = car() give_me_a_yugo = yugo() give_me_a_yugo.need_a_push() #yugo类的对象可以相应need_a_push()的方法,但是car不行 #使用super从父类得到帮助 class person(): def __init__(self,name): self.name = name class EmailPerson(person): def __init__(self,name,email): #子类的__init__()调用了父类的Person.__init__()方法,他会自动将self参数传递给父类 super().__init__(name) #通过super()方法获取了父类person的定义 self.email = email bob = EmailPerson('bob Fraples','bob@frapples.com') print(bob.name) print(bob.email) #使用属性对特征进行访问和设置 class duck(): def __init__(self,input_name): self.hidden_name = input_name def get_name(self): print('inside the getter') return self.hidden_name def set_name(self,input_name): self.hidden_name = input_name name = property(get_name,set_name) #第一个参数是getter方法,第二个是setter方法 fowl = duck('howard') print(fowl.name) #当尝试访问duck类对象的name特性时,get_name()会被自动调用 fowl.get_name() #也可以显示调用get_name(),就像普通的getter方法一样 fowl.name = 'daffy' #当对name特性执行赋值时,set_name()方法会被调用 print(fowl.name) fowl.set_name('daffy') #显示调用set_name()方法 #利用装饰器@property,指示getter方法 #利用name.setter,用于指示setter方法 class duck(): def __init__(self,input_name): self.hidden_name = input_name @property def name(self): print('inside the getter') return self.hidden_name @name.setter def name(self,input_name): print('inside the setrer') self.hidden_name = input_name fowl = duck('howard') print(fowl.name) fowl.name = 'donald' print(fowl.name) #鸭子类型 class quote(): def __init__(self,person,words): self.person = person self.words = words def who(self): return self.person def sys(self): return self.words + '.' class questionquote(quote): def sys(self): return self.words + '?' class exclamationquote(quote): def sys(self): return self.words + '!' hunter = quote('elmer fudd',"I'm a hunting wabbits") print(hunter.who(),'sys:',hunter.sys()) hunted1 = questionquote('bug bunny',"what's up,doc") print(hunted1.who(),'sys:',hunted1.sys()) hunted2 = exclamationquote('daffy duck',"It's rabbit season") print(hunted2.who(),'sys:',hunted2.sys())
转载请注明原文地址: https://www.6miu.com/read-53482.html

最新回复(0)