您的位置:首页 > 编程语言 > Python开发

python Class:面向对象高级编程

2018-07-19 15:46 741 查看
一、Class添加新方法: MethodType
外挂类

class Animal(object):
def __init__(self, name, age):
self.name = name
self.age = age
def run(self):
print 'Animal is run'
def set_color(self, color):
self.color = color;
print color

dog = Animal('Pity', 9)
cat = Animal('Miumiu', 9)

from types import MethodType
dog.set_color = MethodType(set_color, dog, Animal)
dog.set_color('yellow')



print dog.color



cat.set_color('white_yellow')



由此可见,MethodType指定添加在dog对象中,而非Animal中

2.内嵌类
class Animal(object):
def __init__(self, name, age):
self.name = name
self.age = age
def run(self):
print 'Animal is run'def set_color(self, color):
self.color = color;
print color
dog = Animal('Pity', 9)cat = Animal('Miumiu', 9)

from types import MethodType
Animal.set_color = MethodType(set_color, None, Animal)

dog.set_color('yellow')



cat.set_color('white_yellow')



格式图:



二、Class限制添加新元素:__slots__
普通的Class没有限制添加元素

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

class Animal(object):
def __init__(self, name, age):
self.name = name
self.age = age
def run(self):
print 'Animal is run'

dog = Animal('Pity', 9)

dog.color = 'yellow' #dog实体添加了新元素color
print dog.color



2.限制添加新元素:__slots__
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

class Animal(object):
__slots__ = ('name', 'age') #限制实体添加其他元素
def __init__ (self, name, age):
self.name = name
self.age = age
def run(self):
print 'Animal is run'

dog = Animal('Pity', 9)
print dog.name



dog.color = 'yellow'



!!!但是!!!!!
对于继承Animal的子类来讲,这个方法无效,除非在子类中也添加__slots__
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

class Animal(object):
__slots__ = ('name', 'age')
def __init__ (self, name, age):
self.name = name
self.age = age
def run(self):
print 'Animal is run'

class Cat(Animal): #添加继承Animal的子类
pass

cat = Cat('Miumiu', 9)
cat.color = 'white_yellow'
print cat.color

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python MethT & slots