zoukankan      html  css  js  c++  java
  • python 教程 第九章、 类与面向对象

    第九章、 类与面向对象
    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) 
    服务项目 技术咨询 微信图书 微信视频 微信代码 定制开发 其他福利
    服务入口 QQ群有问必答
    查看详情
    一本书解决90%问题
    查看详情
    微信开发视频
    小程序开发视频
    免费代码
    ¥1888阿里云代金券
    查看详情
    营销工具
    微信特异功能
  • 相关阅读:
    linux命令大全
    linux几个常用命令
    linux基础入门命令自我总结——乱
    linux标准目录的结构——各个目录都是干啥的
    python基础知识9——模块2——常见内置模块
    python基础知识8——模块1——自定义模块和第三方开源模块
    手写数据结构-链表
    手写数据结构-基于动态数组的循环队列
    手写数据结构-基于动态数组的队列
    手写数据结构-基于动态数组的栈
  • 原文地址:https://www.cnblogs.com/txw1958/p/2210014.html
Copyright © 2011-2022 走看看