zoukankan      html  css  js  c++  java
  • python类

    一般来说,实例变量用于对每一个实例都是唯一的数据,类变量用于类的所有实例共享的属性和方法:

     1 class Dog(object):
     2     kind = 'canine'  #类变量用于类的所有实例共享的变量
     3     def __init__(self,name):
     4         self.name = name   #实例变量用于对每一个实例都是唯一的数据
     5 
     6 d = Dog('Fido')
     7 e = Dog('Buddy')
     8 
     9 print("d.kind: %s"%d.kind)  #所有实例共享
    10 print("e.kind: %s"%e.kind)  #所有实例共享
    11 print("d.name: %s"%d.name)  #不同实例,值不同
    12 print("e.kind: %s"%e.name)  #不同实例,值不同
    View Code

    显示结果:

    d.kind: canine
    e.kind: canine
    d.name: Fido
    e.kind: Buddy

    正如在名称和对象讨论的,可变对象,例如列表和字典,的共享数据可能带来意外的效果。例如,下面代码中的tricks 列表不应该用作类变量,因为所有的Dog 实例将共享同一个列表:

     1 class Dog:
     2 
     3     tricks = []             # 错误的适用类变量
     4 
     5     def __init__(self, name):
     6         self.name = name
     7 
     8     def add_trick(self, trick):
     9         self.tricks.append(trick)
    10 
    11 >>> d = Dog('Fido')
    12 >>> e = Dog('Buddy')
    13 >>> d.add_trick('roll over')
    14 >>> e.add_trick('play dead')
    15 >>> d.tricks                # 所有实例共享了该属性
    16 ['roll over', 'play dead']
    View Code

    这个类的正确设计应该使用一个实例变量:

    1 class Dog(object):
    2     def __init__(self,name):
    3         self.name = name
    4         self.tricks = []  #为每一个实例创建一个空的列表
    5     def add_trick(self,trick):
    6         self.tricks.append(trick)
    View Code
  • 相关阅读:
    开始熟悉一下数据结构了
    首个概率dp
    十六进制转化为八进制
    蓝桥之 剪格子
    蓝桥之 颠倒的价格
    还是闲的
    也是闲的
    闲的无聊,,,
    函数进阶
    函数基础
  • 原文地址:https://www.cnblogs.com/guoqp/p/5435034.html
Copyright © 2011-2022 走看看