Python:面向对象编程

来源:互联网 发布:人员岗位优化配置方案 编辑:程序博客网 时间:2024/06/05 09:57

创建一个MyClass.py的文件

mystr=raw_input('请输入你想要知道的对象')class MyWorld:#定义的人对象def person (self):self.mytalk='我可以用语言来表达'self.mylimbs='也可以用肢体语言来表达'self.myeyes='你可以眉目传情吗'print '我是人,因此我可以%s,%s,%s'%(self.mytalk,self.mylimbs,self.myeyes)#定义的猪对象def pig (self):self.mytalk='哼哼哼哼'self.myspecialty='吃饭,睡觉'self.mymaster='谁对我好,谁就是我的主人' print '我是猪,我的特点就是%s,%s,%s'%(self.mytalk,self.myspecialty,self.mymaster)#定义的公鸡对象def rooster (self):self.mywork='在天朦朦亮的时候打鸣'self.mymotto='所谓闻鸡起舞,说的就是我'print '我是公鸡,我可以%s,%s'%(self.mywork,self.mymotto)if __name__=='__main__':myworld=MyWorld()if mystr=='人':myworld.person()elif mystr=='猪':myworld.pig()elif mystr=='公鸡':myworld.rooster()else:print '不好意思,该类中没有录入该对象'

运行结果:

Python 2.7.6 (default, Nov 10 2013, 19:24:18) [MSC v.1500 32 bit (Intel)] on win32Type "copyright", "credits" or "license()" for more information.>>> ================================ RESTART ================================>>> 请输入你想要知道的对象人我是人,因此我可以我可以用语言来表达,也可以用肢体语言来表达,你可以眉目传情吗>>> ================================ RESTART ================================>>> 请输入你想要知道的对象猪我是猪,我的特点就是哼哼哼哼,吃饭,睡觉,谁对我好,谁就是我的主人>>> ================================ RESTART ================================>>> 请输入你想要知道的对象公鸡我是公鸡,我可以在天朦朦亮的时候打鸣,所谓闻鸡起舞,说的就是我>>> ================================ RESTART ================================>>> 请输入你想要知道的对象齐轩不好意思,该类中没有录入该对象>>> 

公有属性:实例属性即以self作为前缀的属性,如果在类的方法中定义的变量没有使用self作为前缀声明,那么该变量就是一个普通的局部变量

注:如果函数、方法或者属性的名称以两个下划线开始,则说明为私有类型。相反,如果没有以两个下划线开始,则表示为公有属性。

私有属性:将公有的实例属性direction修改成私有__direction;私有的属性不能被实例化对象访问,应该按照如下访问:实例化对象名.__类名__私有属性名。

数据属性:可以被实例化对象调用,不需要预先定义,当数据属性初次被使用时,即被创建并赋值

class date:    passif __name__=="__main__":    data=date()    data.name='我是齐轩'    print data.name
内置属性


类方法:

静态方法:使用staticmethod()可以将普通方法和私有方法转化为静态方法;在静态方法中不仅可以使用类,还可以使用实例化对象来访问,但是不能直接访问私有方法,否则会出现异常。

类方法和类实例方法:静态方法和类方法都可以被类和类实例调用,而类实例方法只能被类实例调用。

内置方法:

(1)__int__方法:Python中的构造函数

class Person:    def __init__(self,name):        self.name=name    def sayHi(self):        print 'Hello,my name is',self.namep=Person('qixuan')p.sayHi()
(2)__del__方法:释放被占用的资源,析构函数

class Room:    count=0    def __init__(self,name):        self.name=name        print '初始化,传人的名称是%s'%self.name        Room.count+=1    def __del__(self):        print '%s说byebye'%self.name        Room.count-=1        if Room.count==0:            print'我是这个房间里的最后一个了'        else:            print'这间房子里有%d个人还未离开'%Room.count    def sayHi(self):        print'大家好,我的名字是%s'%self.name    def howmany(self):        if Room.count==1:            print'这个房间里就剩下我一个人了'        else:            print'这个房间里还有%d个人'%Room.count             if __name__=='__main__':    room=Room('qixuan')    room.sayHi()    room.howmany()    room1 = Room('yuting')    room1.sayHi()    room1.howmany()    room.__del__()结果:>>> 初始化,传人的名称是qixuan大家好,我的名字是qixuan这个房间里就剩下我一个人了初始化,传人的名称是yuting大家好,我的名字是yuting这个房间里还有2个人qixuan说byebye这间房子里有1个人还未离开
由于__del__方法很难保证在什么时候运行,因此需要明确指明。

(3)__new__方法

__init__方法在创建完对象之后才被调用,对当前对象的实例进行初始化,而__new__方法则是在创建对象事被调用。


方法的动态特性

可以动态添加类的方法,将某个已经定义的方法添加到类中:类名.新的方法名.已经存在的方法名

class Yesterday:    passdef today(self):    print'我要牢牢把握今天'if __name__=='__main__':    Yesterday.yesterday=today    yes=Yesterday()    yes.yesterday()
运行结果:>>> 
我要牢牢把握今天

注意:如果该类中存在重新定义的方法,是会替换该方法中的内容的。

实例描述:

class Fruit:       def __init__(self, *args):           for arg in args:               arg(self)                      def config(self, *args):           for arg in args:               arg(self)            #是否成熟            def has_harvest(self):       self.harvest = True         def has_not_harvest(self):       self.harvest = False    #水果的颜色       def setColor(color):       def method(self):           self.color = color       return method#水果是否能吃def can_eat(self):       self.eat = Truedef can_notEat (self):    self.eat=False if __name__=='__main__':apple = Fruit(has_not_harvest, setColor('green')) print '苹果是否成熟:%s;目前苹果的颜色:%s' % (apple.harvest, apple.color)  apple.config(has_harvest, setColor('red'),can_notEat)   print '苹果是否成熟:%s;目前苹果的颜色:%s;可以摘下来吃吗:%s' % (apple.harvest, apple.color, apple.eat)apple.config(has_harvest, setColor('red'), can_eat)   print '苹果是否成熟:%s;目前苹果的颜色:%s;可以摘下来吃吗:%s' % (apple.harvest, apple.color, apple.eat)  运行结果:>>> 苹果是否成熟:False;目前苹果的颜色:green苹果是否成熟:True;目前苹果的颜色:red;可以摘下来吃吗:False苹果是否成熟:True;目前苹果的颜色:red;可以摘下来吃吗:True

0 0
原创粉丝点击