Python学习笔记--基础篇5
面向对象编程
class Color(object):
pass
关键字def用于告诉Python定义了一个新函数,关键字class表明定义了一个新类。(object)这部分内容说的是,类Color是一种对象。
定义类的方法,直接将其放到该类内部即可。
class Color(object):
def lightness(self):
strongest = max(self.red, self.green, self.blue)
weakest = min(self.red, self.green, self.blue)
return 0.5 * (strongest + weakest) / 255
当python在调用某个对象中的某个方法时,会自动将该对象的引用作为该方法的第一个参数传进去。这条关于self的规则意味着,当你在定义一个方法时,除了实际需要传入的那些参数之外,还必须再多写一个。相反,在调用某个方法时,实际提供的参数要比该方法定义中所需的少一个才行。
构造器
在python中,构造器就是__init__:
class Color(object):
def __init__(self, r, g, b):
self.red = r
self.green = g
self.blue = b
名称两边的双下划綫说明该方法对python有特殊的含义,创建新对象的时候,该方法就会被调用。python会自动将对象本身的引用当做第一个参数传给__init__。
特殊方法
__str__和__repr__
>>>purple = Color(128, 0, 128)
>>>print purple
<color.Color object at 0x6b150>
这就是object所定义的从对象到字符串的转换行为。由于object无法知晓从它所派生出来的类是什么,所以只能将该对象在内存中的位置显示出来。如果想要呈现一段更有意义的字符串,有两个特殊方法,即__str__和__repr__。
class Color(object):
def __init__(self, r, g, b):
self.red = r
self.green = g
self.blue = b
def __str__(self):
return '(%s, %s, %s)' %(self.red, self.green, self.blue)
在使用print时,__str__就会被调用。
>>>purple = Color(128, 0, 120)
>>>print purple
(128, 0, 128)
Python中还有很多特殊方法,Python官网给出了完整的列表。其中有__add__、__sub__和__eq__等,它们分别在用“+”对对象做加法,用“-”对对象做减法、用“==”对对象做比较的时候调用。
>>>purple = Color(128, 0, 128)
>>>white = Color(255, 255, 255)
>>>dark_grey = Color(50, 50, 50)
>>>print purple + dark_grey
Color(178, 50, 178)
>>>print white - dark_grey
Color(205, 205, 205)
>>>print white == Color(255, 255, 255)
True