Python面向对象的类属性 类结构及设计模式

类是一个特殊的对象
Python中一切皆对象

 class AAA:定义类属性为类对象
    obj1 = AAA:属于实例对象

在运行程序时,类同样会被加载到内存
在Paython中,类是一个特殊的对象–类对象

除了封装实例(对象)的属性和方法外,类对象还
可以有自己的属性和方法

通过类名的方式可以直接访问类的属性或者调用类的方法

类属性就是针对类对象定义的属性使用赋值语句在class关键字下方可以定义类属性
类属性用于记录于这个类相关的特征

类方法就是针对类对象定义的方法
在类方法内部就可以直接访问类属性或者调用其他
类方法

语法如下:
@classmethod
def 类方法(cls)
    pass

示例一

class Tool(object):
    #使用了赋值语句定义类函数,记录所有工具的数量
    count = 0
    def __init__(self,name):
        self.name = name
        #让类属性的值+1
        Tool.count += 1

#创建工具对象(对象在创建的时候,会自动调用初始化方法)
tool1 = Tool('斧头')
tool2 = Tool('榔头')
tool3 = Tool('梯子')

#输出工具对象总数
#使用类名,属性名来获取
print Tool.count

示例二

class Toy(object):
    #1.定义类属性
    count = 0

    @classmethod
    def show_toy_count(cls):
        print '玩具对象的数量 %d '% cls.count
    def __init__(self,name):
        self.name = name
        #让类属性的值+1
        Toy.count += 1

#创建玩具对象
toy1 = Toy('乐高')
toy2 = Toy('玩具熊')
toy3 = Toy('遥控车')

#调用类方法
Toy.show_toy_count()
#在方法的内部,可以直接访问类属性

类属性-类方法-综合示例

class Game(object):
   top_score = 0
   def __init__(self,player_name):
       self.player_name = player_name

   @staticmethod
   def show_help():
       print '游戏开始前请看游戏规则'

   @staticmethod
   def show_top_score(cls):
       print '当前玩家历史记录 %d' % cls.top_score

   def star_game(self):
       print '%s 游戏开始' % self.name_player


Game.show_help()
Game.show_top_score()
game = Game('小壮')
game.str_game()

私有属性和私有方法示例

class Women():
    def __init__(self,name):
        self.name = name
        self.__age = 18
    def __secret(self):
        print '%s 的年龄是 %d '% (self.name,self.__age)

lily = Women('lily')
lily.secret()

单例设计模式示例

"""
class MusicPlayer(object):
    def __new__(cls, *args, **kwargs):
#第一个参数cls:哪一个类调用 就传递哪一个类
#第二个参数*args:多值参数
#第三个参数**kwargs:多值的字典参数
    print '创建对象,分配空间'

    def __init__(self):
        print '播放器初始化'

player = MusicPlayer()
print player

示例二

class Singleton(object):
    def __new__(cls, *args, **kwargs):
        if not hasattr(cls,'_the_instance'):
            cls._the_instance=object.__new__(cls,*args, **kwargs)
        return cls._the_instance

class A(Singleton):
    print 'init before'
    def __init__(self):
        print 'i am __init__'
    def f(self):
        print 'i am f'

a=A()
b=A()
a.f()
print 'done'

猜你喜欢

转载自blog.csdn.net/hello_xiaozhuang/article/details/81182932