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) 
  • 相关阅读:
    Unknown type '246 in column 3 of 5 in binary-encoded result set
    IOS开发常用的linux命令
    苹果开发中常用英语单词
    ios 中的UI控件学习总结(1)
    Srping MVC+mybatis mapping 多映射 配置
    IIS程序POST请求被触发两次的灵异事件
    文件服务器共享专用端口留档记录
    windows环境配置showdoc在线文档教程
    WindowsSever2008 R2 Standard 共享打印机手顺
    高效计算_七月算法5月深度学习班第2次课程笔记
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6468845.html
Copyright © 2011-2022 走看看