python学习笔记(五)
面向对象方法
元组的二义性:不明确参数代表的含义
circle=(2,4,6) def distance_from_origin(x,y): return "返回x,y坐标" def edge_distance_from_origin(x,y,radio): return "返回 x,y,radio" >>> distance_from_origin(*circle[:2]) '返回x,y坐标' >>> edge_distance_from_orgin(*circle) '返回 x,y,radio'
通过使用指定的元组,解决货值元组顺序的问题以及使用元组拆分的问题
>>> Person=collections.namedtuple("Person",'name age sex') >>> p=Person("tsui",18,'man') >>> p Person(name='tsui', age=18, sex='man')
附加方法的实现(应避免使用两个_来头来命名方法)
+ -->__add__()
len -->__len__()
- -->__sub__()
python中的类从object衍生而来
子类中任何方法都可能被重写
使用super()调用父类方法
自定义类
语法:
class className:
suite
class className(base_classes):
suite
pass 代表空语句,什么也不做
属性和方法
Person类
class Person: def __init__(self, name="",age=0,sex="man"): self.name = name self.age=age self.sex=sex def __eq__(self,other): return self.name==other.name and self.age==other.age and self.sex==other.sex def __str__(self): return "{0.x!r},{0.y!r}".format(self) def Speak(self): print("{0.name} say i'm {0.age} ".fromat(self))
import Animal a=Animal.Person(name="hiuyeung",age=18,sex="man") if a.name=="hiuyeung": print(" good guy !") else: print(" bad guy !")
在对方法进行调用时,python会自动提供一个参数,对对象本身的引用self,所有对象属性都必须由self进行限定。
对象创建过程
1,调用__new__(),(自身的或者父类的)
2,调用__init__()