新旧式类、私有方法、类属性和类方法、静态方

一、Python面向对象中的新旧式类

1)新式类(推荐使用):在定义类时,类后边括号里要继承基类(object)。在python3.x中若没有指定父类,会默认使用的是object作为基类;在python2.x中,若没指定父类,则不会以object作为基类。

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

3)dir方法是用来查看类的内置方法。

二、私有方法和属性

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

#定义一个man类


class Man(object):

def __init__(self,name,age):


      self.name = name

self.__age = age      # 定义一个私有属性age

def __secret(self):

print "%s的年龄是:%s" %(self.name,self.__age)


  def test(self):            # 公有类可以调用私有属性和私有方法


      self.__secret()

demo = Man('demo',18)

# 不能访问私有属性

# print demo.age

# 也不能访问私有方法

# demo.secret()

demo.test()

2)继承中私有属性和私有方法问题:子类不可以继承父类的私有属性和私有方法

class A(object):

def __init__self(self,name):

self.__age = 18    # 定义一个私有属性和公有属性

self.name = name

def __secret(self):

print "%s的年龄是%s" %(self.name,self.__age)

class B(A):


  def test(self):

print self.name

# 不能访问父类私有属性和方法


      # print self.__age 

# self.__secret()

demo = A('demo')

# 在外界也不可以访问父类的私有属性和方法

demo.test 

三、类属性和类方法

1)类对象:类是一个特殊的对象,也叫类对象。故类对象也有自己对应的属性和方法,叫做类属性和类方法。


  2)类属性:就是给类对象定义的属性;通常用来记录与类相关的特征;不会记录具体对象的特征。在class关键字的下方定义。

3)类方法:针对类对象定义的方法;在类方法内部只可以调用类属性或类方法。定义格式为:@classmethod  def 类名():  pass 

class Toy(object):

count = 0      # 使用赋值语句定义类属性


  def __init__(self,name):

self.name = name

Toy.count += 1  # 每次创建对象,计数器加1


  @classmethod    # 定义类方法的标识


  def show_toy_count(cls):

print "玩具对象的数量为%d"  %cls.count


# 创建玩具对象

toy1 = Toy('乐高')


toy2 = Toy('玩具车')

Toy.count              # 调用类属性


Toy.show_toy_count()    # 调用类方法

四、静态方法

1)静态方法:在开发的时候,如果需要在类中封装一个方法;这个方法不需要访问实例属性或者实例方法,也不需要访问类属性或类方法;此时我们可以把这个方法封装为静态方法。定义格式为:@staticmethod  def 类名():  pass 

class Cat(object): 

@staticmethod

# 不能访问实例属性/类属性

# 静态方法不需要传递第一个参数self


    def  call():

print "喵喵喵~~~"


# 通过 '类名.静态方法' 来调用;(不需要创建对象就可以直接调用静态方法)

Cat.call()   

五、类对象、类属性、静态方法的综合实例 

1)需求:设计一个game类


    属性:定义一个属性top_score记录游戏的历史最高分(类属性)
          定义一个属性player_name记录当前游戏玩家的玩家姓名(实例属性)
    方法:
          show_help显示游戏帮助信息(静态方法,自己的参数)
          show_top_socre显示历史最高分(类方法,参数为cls)
          start_game开始当前玩家的游戏(实例方法,参数为self)

import random


class Game(object):
    top_score = 0    # 定义一个类属性,计算最高成绩
    def __init__(self, name):
        self.play_name = name
        Game.top_score = 0    # 初始化为0
    @staticmethod
    def show_help():          # 定义静态函数
        print "游戏帮助"
        print "随机生成1-10的数字。猜三次!第一次猜对10分;第二次猜对5分,第三次猜对3分;猜不对0分!猜完之后,会记录你的最高成绩!"

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/811878a47d297f166c0734233291af95.html