Discuss / Python / 简单测试下

简单测试下

Topic source

云中仙客_

#1 Created at ... [Delete] [Delete and Lock User]
#encoding:utf-8
'''
    > File Name: dog.py
    > Author: yzxk
    > Mail: yzxk@openp.net 
    > Created Time: 2016年03月01日 星期二 22时06分59秒
'''

from types import MethodType

class Dog(object):
    name = 'dog'
    def __init__(self, age):
        self.age = age 
    def setname(self,name):
        self.name = name
    def getname(self):
        return self.name

d1 = Dog(5)
d2 = Dog(10)

print 'd1.name:',d1.name #对象属性找不到时会找类属性,指向类属性所在地址
print 'd1.age:',d1.age #d1.age是对象的属性
print 'd2.name:',d2.name
print 'd2.age:',d2.age
print 'Dog.name:',Dog.name
#print 'Dog.age:',Dog.age  #对象属性无法查找类属性

print '\n'
#d1.name = 'abc' #如果修改了对象属性,而对象属性指向类属性,那么就会在对象内存中复制一个同名类属性值并指向它
#d1.setname('abc') #同上
#d1.age = 6 #修改了对象属性只会改变该对象内存值
#Dog.name = 'abc' #修改了类属性,那么该类所有对象值都会改变

print 'd1.name:',d1.name
print 'd1.getname():',d1.getname()
print 'd1.age:',d1.age

print 'd2.name:',d2.name
print 'd2.getname():',d2.getname()
print 'd2.age:',d2.age

print 'Dog.name:',Dog.name
#print 'Dog.getname():',Dog.getname() #类属性无法访问对象属性
#print Dog.age #同上

print '\n'
def set_color(self, color): 
   self.color = color 
Dog.set_color = MethodType(set_color, Dog) #类动态增加的方法,每个对象都有
#d1.color = 'blue' #对象可以动态添加对象属性,无法被其他对象访问
d1.set_color('blue') #如果不是动态增加的方法,这里表示的就是对象的属性,然而这里的self.color表示类属性
print 'd1.color:',d1.color
print 'd2.color:',d2.color

  • 1

Reply