1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > Python面向对象—新旧式类 私有方法 类方法 静态方法

Python面向对象—新旧式类 私有方法 类方法 静态方法

时间:2020-05-19 19:38:17

相关推荐

Python面向对象—新旧式类 私有方法 类方法 静态方法

一.私有属性和私有方法

1.私有属性是对象不希望公开的属性,私有方法是对象不希望公开的方法。在定义私有属性和私有方法时,在属性或者方法前,加上__(两个下划线)

class Woman():def __init__(self, name, age):self.name = nameself.__age = age #定义一个私有数据__agedef __secret(self):# 定义一个私有方法__secretprint '%s的年龄是%s' % (self.name, self.__age)lily = Woman('lily', 18)# print lily.age # 不能访问该私有方法lily.secret()

2.继承中私有属性和私有方法问题:子类不能继承父类的私有属性,不能调用父类的私有方法。

class A(object):def __init__(self):# 定义一个私有属性一个共有属性self.num1 = 100self.__num2 = 200# 定义私有方法def __test(self):print '私有方法 %d %d' %(self.num1,self.__num2)class B(A):pass# def demo(self):#print '访问父类的私有属性:%d' % self.__num2# 在外界不能直接访问对象的私有属性/调用私有方法b = B()# b.demo()print b.__num2b.__test

二.Python面向对象中的旧式类和新式类

新式类:在定义类时,类后边括号中要继承自object类(基类)

旧式类(经典类):在定义类时,类后边括号中不用继承object类,甚至不用括号

dir方法是查看类所能使用的方法

三.类对象和类方法

1.类对象:类是一个特殊的对象,称为类对象。在运行程序时,类也会被加载在内存中

类除了继承封装多态的属性和方法外,还可以有自己的属性和方法,通过(类名.)的方法可以直接访问其属性和方法

class Tool(object):# 定义一个类属性countcount = 0def __init__(self,name):self.name = name# 在对象的方法中不能调用类的属性,所以加上类名Tool.count += 1tool1 = Tool('锤子')tool2 = Tool('斧头')tool3 = Tool('剪刀')print Tool.count

2.类方法 类方法就是针对类对象定义的方法,在类内部可以直接调用类方法

定义格式:

@classmethod def 类方法名(cls)

pass

class Toy(object):# 定义类属性count = 0def __init__(self,name):self.name = nameToy.count += 1# 定义类方法@classmethoddef show_toy_count(cls):print '玩具对象的数量是:%d' % cls.count# 创建玩具对象toy1 = Toy('乐高')toy2 = Toy('托马斯')toy3 = Toy('小猪佩琦')# 调用类方法Toy.show_toy_count()

四.静态方法

静态方法:在开发时,如果需要在类中封装一个方法,这个方法即不需要访问实例属性或者调用实例方法,也不需要访问类属性调用类方法,可以将该方法封装为一个静态方法。

定义格式:

@staticmethod def 静态方法名():

pass

class Cat(object):# 定义一个静态方法@staticmethoddef demo():print '小猫喵喵叫!'Cat.demo() # 直接用类名调用类中的静态方法,不用生成对象来调用

五.类对象,类方法,静态方法的综合实例

需求:

1.设计一个Game类

2.属性:

记录游戏的历史最高分

记录当前游戏玩家的姓名

3.方法:

方法show_help显示游戏帮助

方法show_top_score显示历史最高分

方法start_game开始当前玩家的游戏

4.主程序步骤:

查看程序帮助

查看历史最高分

创建游戏对象,开始游戏

class Game(object):history_max = 666def __init__(self, name):self.name = name@staticmethoddef show_help():print '[游戏规则]\n'\'1.躲避掉落物\n' \'2.撞击到掉落物血条降低\n' \'3.吃掉红色的爱心增加血条\n'@classmethoddef show_top_score(cls):print '历史的最高分数是:[%d]' % cls.history_maxdef start_game(self):print '%s准备好了吗?游戏马上开始...' % self.name# 查看游戏帮助Game.show_help()# 查看历史最高分Game.show_top_score()# 创建游戏玩家jay = Game('jay')# 开始游戏jay.start_game()

综合实例总结:

1.实例化方法:方法内部需要访问实例属性

2.类方法:方法内部只需要访问类属性

3.静态方法:方法内部不需要访问实例属性和类属性

如果在方法内部,既需要访问实例属性,又需要访问类属性,应该定义实例方法

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。