python 教程 第九章、 类与面向对象
来源:互联网 发布:苹果电脑怎么关闭软件 编辑:程序博客网 时间:2024/06/05 14:56
第九章、 类与面向对象
1) 类
基本类/超类/父类被导出类或子类继承。
Inheritance继承
Inheritance is based on attribute lookup in Python (in X.name expressions).
Polymorphism多态
In X.method, the meaning of method depends on the type (class) of X.
Encapsulation封装
Methods and operators implement behavior; data hiding is a convention by default.
class C1():
def __init__(self, who):
self.name = who
I1 = C1('bob')
print I1.name #bob
2) 命名空间
X = 11 # Global (module) name/attribute (X, or manynames.X)
def f():
print(X) # Access global X (11)
def g():
X = 22 # Local (function) variable (X, hides module X)
print(X)
class C:
X = 33 # Class attribute (C.X)
def m(self):
X = 44 # Local variable in method (X)
self.X = 55 # Instance attribute (instance.X)
print(X) # 11: module (manynames.X outside file)
f() # 11: global
g() # 22: local
print(X) # 11: module name unchanged
obj = C() # Make instance
print(obj.X) # 33: class name inherited by instance
obj.m() # Attach attribute name X to instance now
print(obj.X) # 55: instance
print(C.X) # 33: class (a.k.a. obj.X if no X in instance)
#print(C.m.X) # FAILS: only visible in method
#print(g.X) # FAILS: only visible in function
3) Self参数
指向对象本身
4) __init__构造器
如果没有__init__,则需要自己定义并赋值
class C1(): # Make and link class C1
def setname(self, who): # Assign name: C1.setname
self.name = who # Self is either I1 or I2
I1 = C1() # Make two instances,
#没有__init__,实例就是个空的命名空间
I1.setname('bob') # Sets I1.name to 'bob'
print(I1.name) # Prints 'bob'
构造器,创建时例时自动调用。
5) 继承搜索的方法
An inheritance search looks for an attribute first in the instance object, then in the class the instance was created from, then in all higher superclasses, progressing from the bottom to the top of the object tree, and from left to right (by default).
6) 一个例子
class AttrDisplay:
def gatherAttrs(self):
attrs = []
for key in sorted(self.__dict__):
attrs.append('%s=%s' % (key, getattr(self, key)))
return ', '.join(attrs)
def __str__(self):
return '[%s: %s]' % (self.__class__.__name__, self.gatherAttrs())
class Person(AttrDisplay): #Making Instances
def __init__(self, name, job=None, pay=0): # Add defaults
self.name = name # Constructor takes 3 arguments
self.job = job # Fill out fields when created
self.pay = pay # self is the new instance object
def lastName(self): # Assumes last is last
return self.name.split()[-1]
def giveRaise(self, percent): # Percent must be 0..1
self.pay = int(self.pay * (1 + percent))
class Manager(Person):
def __init__(self, name, pay):
Person.__init__(self, name, 'mgr', pay)
def giveRaise(self, percent, bonus=.10):
Person.giveRaise(self, percent + bonus)
if __name__ == '__main__': # Allow this file to be imported as well as run/tested
bob = Person('Bob Smith')
sue = Person('Sue Jones', job='dev', pay=100000)
print(bob)
print(sue)
print(bob.lastName(), sue.lastName())
sue.giveRaise(.10)
print(sue)
tom = Manager('Tom Jones', 50000)
tom.giveRaise(.10)
print(tom.lastName())
print(tom)
- python 教程 第九章、 类与面向对象
- python 教程 第九章、 类与面向对象
- Python 教程之面向对象
- python类与面向对象编程
- Python的类与面向对象
- 面向对象技术-软件工程-第九章
- 求职宝典 第九章 面向对象编程
- 面向对象编程与Python
- python面向对象与装饰
- 简明Python教程 --- 11.面向对象
- Python 面向对象(教程4)
- Python高级教程(一)面向对象
- 《简明Python教程》之面向对象编程
- Python 面向对象(高级教程)
- python面向对象-类
- Javascript面向对象教程:Object与Function
- Javascript面向对象教程:Object与Function
- 面向对象 第九课 异常
- python 教程 第四章、 控制流
- python 教程 第五章、 函数
- python 教程 第六章、 模块
- python 教程 第七章、 数据结构
- python 教程 第八章、 第一个python程序
- python 教程 第九章、 类与面向对象
- python 教程 第十章、 输入/输出
- python 教程 第十一章、 异常
- python 教程 第十二章、 标准库
- python 教程 第十三章、 特殊的方法
- SecureCRT自动登录Linux并设置时间
- SecureCRT循环检查设备状态
- SecureCRT下载/注册/安装镜像文件
- python 教程 第十四章、 地址薄作业