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) 
  • 相关阅读:
    Linux使用locate命令定位文件
    【iOS开发-54】案例学习:通过UIScrollView的缩放图片功能练习代理模式的详细实现
    数据结构—单链表(类C语言描写叙述)
    怎样訪问pcie整个4k的配置空间
    [Swift]LeetCode988. 从叶结点开始的最小字符串 | Smallest String Starting From Leaf
    [Swift]LeetCode985. 查询后的偶数和 | Sum of Even Numbers After Queries
    [Swift]LeetCode494. 目标和 | Target Sum
    [Swift]LeetCode493. 翻转对 | Reverse Pairs
    [Swift]LeetCode491. 递增子序列 | Increasing Subsequences
    [Swift]LeetCode488. 祖玛游戏 | Zuma Game
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6468845.html
Copyright © 2011-2022 走看看