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) 
  • 相关阅读:
    [洛谷P4248][AHOI2013]差异
    [洛谷P4070][SDOI2016]生成魔咒
    [洛谷P3979]遥远的国度
    [CF551E]GukiZ and GukiZiana
    [洛谷P4721]【模板】分治 FFT_求逆
    [洛谷P4721]【模板】分治 FFT
    一键智能抠图-原理与实现
    国防科技大学单张RGB-D图像预测物体对称性
    在OpenCV中使用色彩校正
    Deformable DETR DETR 存在收敛速度慢等缺陷。为了解决这些问题,本文可变形 DETR,其注意力模块仅关注于参考点附近的一小部分采样点作为注意力模块中的 key 元素。可变形 DETR 可以在比 DETR 少 9/10 的训练轮数下,达到更好的性能(尤其是在小目标上)。在 COCO 基准上的大量实验表明了该方法的有效性。
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6468845.html
Copyright © 2011-2022 走看看