Python:面向对象编程

创建一个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 win32
Type "copyright", "credits" or "license()" for more information.
>>> ================================ RESTART ================================
>>> 
请输入你想要知道的对象人
我是人,因此我可以我可以用语言来表达,也可以用肢体语言来表达,你可以眉目传情吗
>>> ================================ RESTART ================================
>>> 
请输入你想要知道的对象猪
我是猪,我的特点就是哼哼哼哼,吃饭,睡觉,谁对我好,谁就是我的主人
>>> ================================ RESTART ================================
>>> 
请输入你想要知道的对象公鸡
我是公鸡,我可以在天朦朦亮的时候打鸣,所谓闻鸡起舞,说的就是我
>>> ================================ RESTART ================================
>>> 
请输入你想要知道的对象齐轩
不好意思,该类中没有录入该对象
>>> 

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

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

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

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

class date:
    pass
if __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.name
p=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:
    pass
def 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 = True
def 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值