python 教程 第九章、 类与面向对象

简介: 第九章、 类与面向对象 1)    类 基本类/超类/父类被导出类或子类继承。 Inheritance继承 Inheritance is based on attribute lookup in Python (in X.

第九章、 类与面向对象
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) 
目录
相关文章
|
21天前
|
数据可视化 DataX Python
Seaborn 教程-绘图函数
Seaborn 教程-绘图函数
46 8
|
21天前
Seaborn 教程-主题(Theme)
Seaborn 教程-主题(Theme)
67 7
|
21天前
|
Python
Seaborn 教程-模板(Context)
Seaborn 教程-模板(Context)
47 4
|
21天前
|
数据可视化 Python
Seaborn 教程
Seaborn 教程
43 5
|
1月前
|
关系型数据库 开发者 Python
Python编程中的面向对象设计原则####
在本文中,我们将探讨Python编程中的面向对象设计原则。面向对象编程(OOP)是一种通过使用“对象”和“类”的概念来组织代码的方法。我们将介绍SOLID原则,包括单一职责原则、开放/封闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则有助于提高代码的可读性、可维护性和可扩展性。 ####
|
2月前
|
Python
SciPy 教程 之 Scipy 显著性检验 9
SciPy 教程之 Scipy 显著性检验第9部分,介绍了显著性检验的基本概念、作用及原理,通过样本信息判断假设是否成立。着重讲解了使用scipy.stats模块进行显著性检验的方法,包括正态性检验中的偏度和峰度计算,以及如何利用normaltest()函数评估数据是否符合正态分布。示例代码展示了如何计算一组随机数的偏度和峰度。
33 1
|
2月前
|
BI Python
SciPy 教程 之 Scipy 显著性检验 8
本教程介绍SciPy中显著性检验的应用,包括如何利用scipy.stats模块进行显著性检验,以判断样本与总体假设间的差异是否显著。通过示例代码展示了如何使用describe()函数获取数组的统计描述信息,如观测次数、最小最大值、均值、方差等。
34 1
|
8月前
|
Java 程序员 Python
python学习13-面向对象的三大特征、特殊方法和特殊属性、类的浅拷贝和深拷贝
python学习13-面向对象的三大特征、特殊方法和特殊属性、类的浅拷贝和深拷贝
29.从入门到精通:Python3 面向对象继承 多继承 方法重写 类属性与方法
29.从入门到精通:Python3 面向对象继承 多继承 方法重写 类属性与方法
28.从入门到精通:Python3 面向对象 面向对象技术简介 类定义 类对象 类的方法
28.从入门到精通:Python3 面向对象 面向对象技术简介 类定义 类对象 类的方法