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) 
  • 相关阅读:
    ZooKeeper基本原理
    ElasticSearch的基本原理与用法
    Solr与MySQL查询性能对比
    MySQL性能优化总结
    Java并发集合及线程池实现原理
    Java垃圾回收机制
    Java Spring的IoC和AOP的知识点速记
    基于Solr的空间搜索
    系统学习消息队列分享(十) 如何实现高性能的异步网络传输?
    系统学习消息队列分享(九) 如何使用异步设计提升系统性能?
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6468845.html
Copyright © 2011-2022 走看看