zoukankan      html  css  js  c++  java
  • [py]super调用父类的方法---面向对象

    super()用于调用父类方法

    http://www.runoob.com/python/python-func-super.html

    super() 函数是用于调用父类(超类)的一个方法。

    class A:
        def __init__(self, name):
            self.name = name
    
        def say(self):
            print('fu say')
    
    
    class B(A):
        def __init__(self, name):
            super(B, self).__init__(name) # -------
    
        def say(self):
            print('zi say')
    
    
    b = B('maotai')
    super(B, b).say()  # -----------
    
    

    而py3可以这样写

    子类调用父类方法: super

    https://python3-cookbook.readthedocs.io/zh_CN/latest/c08/p07_calling_method_on_parent_class.html

    class A:
        def __init__(self, x):
            self.x = x
    
    
    class B(A):
        def __init__(self, x):
            super().__init__(10)
            self.y = 1
    
    
    print(B(10).x)
    print(B(10).y)
    

    另一种方法

    #类定义
    class people:
        #定义基本属性
        name = ''
        age = 0
        #定义私有属性,私有属性在类外部无法直接进行访问
        __weight = 0
        #定义构造方法
        def __init__(self,n,a,w):
            self.name = n
            self.age = a
            self.__weight = w
        def speak(self):
            print("%s 说: 我 %d 岁。" %(self.name,self.age))
     
    #单继承示例
    class student(people):
        grade = ''
        def __init__(self,n,a,w,g):
            #调用父类的构函
            people.__init__(self,n,a,w)
            self.grade = g
        #覆写父类的方法
        def speak(self):
            print("%s 说: 我 %d 岁了,我在读 %d 年级"%(self.name,self.age,self.grade))
     
     
     
    s = student('ken',10,60,3)
    s.speak()
    

    oop概念

    http://www.runoob.com/python3/python3-class.html

    http://www.runoob.com/python/python-object.html

    类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
    方法:类中定义的函数。
    类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
    数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据。
    方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
    实例变量:定义在方法中的变量,只作用于当前实例的类。
    继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个Dog类型的对象派生自Animal类,这是模拟"是一个(is-a)"关系(例图,Dog是一个Animal)。
    实例化:创建一个类的实例,类的具体对象。
    对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。
    

    Python内置类属性

    
    __dict__ : 类的属性(包含一个字典,由类的数据属性组成)
    __doc__ :类的文档字符串
    __name__: 类名
    __module__: 类定义所在的模块(类的全名是'__main__.className',如果类位于一个导入模块mymod中,那么className.__module__ 等于 mymod)
    __bases__ : 类的所有父类构成元素(包含了一个由所有父类组成的元组)
    
    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
     
    class Employee:
       '所有员工的基类'
       empCount = 0
     
       def __init__(self, name, salary):
          self.name = name
          self.salary = salary
          Employee.empCount += 1
       
       def displayCount(self):
         print "Total Employee %d" % Employee.empCount
     
       def displayEmployee(self):
          print "Name : ", self.name,  ", Salary: ", self.salary
     
    print "Employee.__doc__:", Employee.__doc__
    print "Employee.__name__:", Employee.__name__
    print "Employee.__module__:", Employee.__module__
    print "Employee.__bases__:", Employee.__bases__
    print "Employee.__dict__:", Employee.__dict__
    
    Employee.__doc__: 所有员工的基类
    Employee.__name__: Employee
    Employee.__module__: __main__
    Employee.__bases__: ()
    Employee.__dict__: {'__module__': '__main__', 'displayCount': <function displayCount at 0x10a939c80>, 'empCount': 0, 'displayEmployee': <function displayEmployee at 0x10a93caa0>, '__doc__': 'xe6x89x80xe6x9cx89xe5x91x98xe5xb7xa5xe7x9ax84xe5x9fxbaxe7xb1xbb', '__init__': <function __init__ at 0x10a939578>}
    

    单下划线、双下划线、头尾双下划线说明

    __foo__: 定义的是特殊方法,一般是系统定义名字 ,类似 __init__() 之类的。
    
    _foo: 以单下划线开头的表示的是 protected 类型的变量,即保护类型只能允许其本身与子类进行访问,不能用于 from module import *
    
    __foo: 双下划线的表示的是私有类型(private)的变量, 只能是允许这个类本身进行访问了。
    

    dir() 获得一个对象的所有属性和方法

  • 相关阅读:
    165. Compare Version Numbers
    164. Maximum Gap
    3、桶排序
    162. Find Peak Element
    160. Intersection of Two Linked Lists
    155. Min Stack
    154. Find Minimum in Rotated Sorted Array II
    153. Find Minimum in Rotated Sorted Array
    Linux/Unix系统编程手册 第二章:基本概念
    Linux/Unix系统编程手册 第一章:历史和标准
  • 原文地址:https://www.cnblogs.com/iiiiiher/p/9604733.html
Copyright © 2011-2022 走看看