python类和对象

来源:互联网 发布:网络举报电话是多少 编辑:程序博客网 时间:2024/05/17 21:32
#第六章对象和类#使用class定义类class person():    def __init__(self,name):        self.name = namehunter = 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):    passgive_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 = nameclass MDPerson(person):    def __init__(self,name):        self.name = "Doctor" + nameclass JDPerson(person):    def __init__(self,name):        self.name = "Esquire" + nameperson = 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 = nameclass EmailPerson(person):    def __init__(self,name,email):  #子类的__init__()调用了父类的Person.__init__()方法,他会自动将self参数传递给父类        super().__init__(name)   #通过super()方法获取了父类person的定义        self.email = emailbob = 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_namefowl = 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())

原创粉丝点击