创建一个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