PYTHON_DAY_13_201606011
来源:互联网 发布:airx 知乎 编辑:程序博客网 时间:2024/06/05 10:51
今天来看关于OOP的高级编程
Software Development Kit = SDK = 软件开发工具包
#数据封装、继承和多态只是OOP中最基础的三个概念,其他还有多重继承、定制类、元类等概念
#Python作为动态语言,你可以在给instance绑定属性,也可以直接给class绑定属性。
from types import MethodType
instance.new_function = MethodType(new_function, instance, class)#给实例创建新的方法
class.new_function = MethodType(new_function, None, class)#直接给类创建新的方法,之后所有该类的实例都可以使用新方法
#当创建一个class时,会从object中继承一个__slots__变量。
class new(object):
__slots__ = ('name', 'job')
#此时,从new这个类建立的实例就只能存在name和job这两个属性名称。
#但是并不影响从new继承下去的子类。
#也不影响对new类而不是其实例,直接建立新属性。
#为了防止对instance中属性的任意修改,需要在类中定义一些方法来限制属性的范围。此时需要用到内置的@property装饰器来进行更方便的操作,它可以把一个方法变成属性调用!
class Student(object):
@property#定义如何得到属性
def birth(self):
return self._birth
@birth.setter#定义如何设置属性
def score(self, value):
if not isinstance(value, int):
raise ValueError('score must be an integer!')
if value < 0 or value > 100:
raise ValueError('score must between 0 ~ 100!')
self._score = value
@property#值定义如何得到属性而不定义如何设置的话,这个方法就是一个只读属性
def age(self):
return 2014 - self._birth
#对于多重继承,除了主线继承下来的类,其他类通常被称之为Mixin,例如AudibleMixin,VisibleMixin。
#class内有很多特殊用途的函数,帮助我们定制类。
class newClass(object):
def __str__(self):
return 'something'
__repr__ = __str__
#定义__str__可以帮助我们打印实例时,回复我们想要看到的文字
>>> print newClass()
something
>>> newClass()#定义了43行,就会有这样的作用。
something
#在类中实现__iter__()方法就可以让类被适用于for... in class的循环,该方法返回一个迭代对象,然后,for循环就会不断调用该迭代对象的next()方法拿到循环的下一个值。
class Fib(object):
def __init__(self):
self.a, self.b = 0, 1 # 初始化两个计数器a,b,注意,这里的计数器变量是函数内的变量,不能用a,b这样来表示
def __iter__(self):
return self # 实例本身就是迭代对象,故返回自己
def next(self):
self.a, self.b = self.b, self.a + self.b # 计算下一个值
if self.a > 100000: # 退出循环的条件
raise StopIteration()
return self.a # 返回下一个值
Software Development Kit = SDK = 软件开发工具包
#数据封装、继承和多态只是OOP中最基础的三个概念,其他还有多重继承、定制类、元类等概念
#Python作为动态语言,你可以在给instance绑定属性,也可以直接给class绑定属性。
from types import MethodType
instance.new_function = MethodType(new_function, instance, class)#给实例创建新的方法
class.new_function = MethodType(new_function, None, class)#直接给类创建新的方法,之后所有该类的实例都可以使用新方法
#当创建一个class时,会从object中继承一个__slots__变量。
class new(object):
__slots__ = ('name', 'job')
#此时,从new这个类建立的实例就只能存在name和job这两个属性名称。
#但是并不影响从new继承下去的子类。
#也不影响对new类而不是其实例,直接建立新属性。
#为了防止对instance中属性的任意修改,需要在类中定义一些方法来限制属性的范围。此时需要用到内置的@property装饰器来进行更方便的操作,它可以把一个方法变成属性调用!
class Student(object):
@property#定义如何得到属性
def birth(self):
return self._birth
@birth.setter#定义如何设置属性
def score(self, value):
if not isinstance(value, int):
raise ValueError('score must be an integer!')
if value < 0 or value > 100:
raise ValueError('score must between 0 ~ 100!')
self._score = value
@property#值定义如何得到属性而不定义如何设置的话,这个方法就是一个只读属性
def age(self):
return 2014 - self._birth
#对于多重继承,除了主线继承下来的类,其他类通常被称之为Mixin,例如AudibleMixin,VisibleMixin。
#class内有很多特殊用途的函数,帮助我们定制类。
class newClass(object):
def __str__(self):
return 'something'
__repr__ = __str__
#定义__str__可以帮助我们打印实例时,回复我们想要看到的文字
>>> print newClass()
something
>>> newClass()#定义了43行,就会有这样的作用。
something
#在类中实现__iter__()方法就可以让类被适用于for... in class的循环,该方法返回一个迭代对象,然后,for循环就会不断调用该迭代对象的next()方法拿到循环的下一个值。
class Fib(object):
def __init__(self):
self.a, self.b = 0, 1 # 初始化两个计数器a,b,注意,这里的计数器变量是函数内的变量,不能用a,b这样来表示
def __iter__(self):
return self # 实例本身就是迭代对象,故返回自己
def next(self):
self.a, self.b = self.b, self.a + self.b # 计算下一个值
if self.a > 100000: # 退出循环的条件
raise StopIteration()
return self.a # 返回下一个值
0 0
- PYTHON_DAY_13_201606011
- 搜索关键字变颜色
- PYTHON_DAY_12_20160610
- hdu HDU 3555 Bomb
- 关于linearLaout的权重,随手笔记
- 高斯模糊的算法
- PYTHON_DAY_13_201606011
- Copy List with Random Pointer 带随机指针的链表的拷贝
- 【每天学一点】C++基础5
- Android自定义ListView
- 一个例子带你深入理解ViewPager之广告轮播条的实现
- Java对象初始化
- Srping源码深度解析(二)容器的基本用法
- IOError: No wkhtmltopdf executable found: ""
- 国外程序员收集整理的PHP资源大全