Python中类的继承及类的属性和方法总结

1.类的继承

类的继承

继承是面向对象的重要特性之一,

继承关系继承是相对两个类而言的父子关系

子类继承了父类的所有公有属性和方法,

继承,实现了代码重用

使用继承

继承可以重用已经存在的数据和行为,减少代码的重复编写,

Python在类名后使用一对括号来表示继承关系,括号中的即类为父类

class Myclass(ParentClass),

如果父类定义了__init__方法,子类必须显式调用父类的__init__方法,

ParentClass.__init__(self,[args...])

如果子类需要扩展父类的行为,可以添加__init__方法的参数.

#!/usr/bin/env python
#-*- coding:utf-8  -*-
class People(object):
    color = 'yellow'
    
    def think(self):
    self.color = "black"
    print "I am a %s "  % self.color
    print ("I am a thinker")
    
class Chinese(People):
    pass
    
cn = Chinese()
print cn.color
cn.think()

父类中有构造函数:

#!/usr/bin/env python
#-*- coding:utf-8  -*-
class People(object):
    color = 'yellow'
     def __init__(self):
        print "Init..."
        self.dwell = 'Earth'
    def think(self):
        print "I am a %s "  % self.color
        print ("I am a thinker")
class Chinese(People):
    pass
cn = Chinese()
print cn.dwell
cn.think()

参数大于两个:

#!/usr/bin/env python
#-*- coding:utf-8  -*-
class People(object):
    color = 'yellow'
    def __init__(self,c):
        print "Init..."
        self.dwell = 'Earth'
     def think(self):
        print "I am a %s "  % self.color
        print ("I am a thinker")
class Chinese(People):
     def __init__(self):
        People.__init__(self,'red')
        pass
cn = Chinese()

Super 函数

class A(object):
        def __init__(self):
            print "enter A"
            print "leave A"
class B(object):
        def __init__(self):
            print "enter B"
            super(B,self),__init__()
            print "leave B"
b = B()
#!/usr/bin/env python
#-*- coding:utf-8  -*-
class People(object):
    color = 'yellow'
    def __init__(self,c):
        print "Init..."
        self.dwell = 'Earth'
    def think(self):
        print "I am a %s "  % self.color
        print ("I am a thinker")
class Chinese(People):
    def __init__(self):
       super(Chinese,self).__init__('red')
       pass
cn = Chinese()
cn.think()
#!/usr/bin/env python
#-*- coding:utf-8  -*-
class People(object):
    color = 'yellow'
    def __init__(self,c):
        print "Init..."
        self.dwell = 'Earth'
    def think(self):
        print "I am a %s "  % self.color
        print ("I am a thinker")
class Chinese(People):
    def __init__(self):
        super(Chinese,self).__init__('red')
     def talk(self):
        print "I like taking."
cn = Chinese()
cn.think()
cn.talk()

多重继承

Python支持多重继承,第一个类可以继承多个父类

语法:

class class_name(Parent_c1,Parent_c2,...)

注意:

当父类中出现多个自定义的__init__的方法时,

多重继承,只执行第一个累的__init_方法,其他不执行。

#!/usr/bin/env python
#-*- coding:utf-8  -*-
class People(object):
    color = 'yellow'
    def __init__(self):
        print "Init..."
        self.dwell = 'Earth'
    def think(self):
        print "I am a %s "  % self.color
        print ("My home is %s ") % self.dwell
class Martian(object):
    color = 'red'
    def __init__(self):
        self.dwell = 'Martian'
class Chinese(People,Martian):
    def __init__(self):
        People.__init__(self)
cn = Chinese()
cn.think()
#!/usr/bin/env python
#-*- coding:utf-8  -*-
class People(object):
    def __init__(self):
        self.dwell = 'Earth'
         self.color = 'yellow'
    def think(self):
        print "I am a %s "  % self.color
        print ("My home is %s ") % self.dwell
class Martian(object):
    color = 'red'
    def __init__(self):
        self.dwell = 'Martian'
    def talk(self):
        print "I like talking"
class Chinese(Martian,People):
    def __init__(self):
        People.__init__(self)
cn = Chinese()
cn.think()
cn.talk()

3.类的属性总结

类属性,也是公有属性,

类的私有属性,

对象的共有属性,

对象的私有属性,

内置属性,

函数的局部变量,

全局变量,

#/usr/bin/env python
# -*- coding:utf-8 -*-
class MyClass(object):
        var1 = '类属性,类的公有属性 var1'
        __var2 = '类的私有属性 __var2'
        def func1(self):
            self.var3 = '对象的公有属性 var3'
            self.__var4 = '对象的私有属性 __var4'
            var5 = '函数的局部变量'
mc = MyClass()
mc.func1()     #调用后才测打印出var3
print mc.var1
print mc._MyClass__var2
print mc.var3
mc1 = MyClass()
# mc1.func1()    #mc1没有调用方法
print mc1.var3

通过类访问:

    #/usr/bin/env python
    # -*- coding:utf-8 -*-
    # @time   :2018/1/2 21:06
    # @Author :FengXiaoqing
    # @file   :__init__.py.py
    #
    var6 = '全局变量 '
    class MyClass(object):
        var1 = '类属性,类的公有属性 var1'    ##定义在方法外
        __var2 = '类的私有属性 __var2'
        def func1(self):
            self.var3 = '对象的公有属性 var3'      ##定义在方法内
            self.__var4 = '对象的私有属性 __var4'
            var5 = '函数的局部变量'
        def func2(self):
            print self.var1
            print self.__var2
            print self.var3
            print self.__var4
            print self.var6
    mc = MyClass()
    mc.func1()
    mc.func2()
    print '*'*50
    print mc.__dict__
    print MyClass.var1
    #print MyClass.__var2    #不测通过类访问
    print mc.var3       #对象的属性只能通过对象来访问
    #print MyClass.__var4
    print MyClass.__dict__

4.类的方法总结

公有方法

私有方法

类方法

静态方法

内置方法

class MyClass(object):
    name = 'Test'
    def func1(self):
        print self.name,
        print "我是公有方法."
        self.__func2() #func1间接调用了func2的私有方法
    def __func2(self):
        print self.name,
        print "我是私有方法."
    def classFun(self):
        print self.name,
        print "我是类方法."
    def staticFun(self):
        print s.name,
        print "我是静态方法."
mc = MyClass()
mc.func1()

调用类方法:用装饰器

    @classmethod
    def classFun(self):
        print self.name,
        print "我是类方法."
    def staticFun(self):
        print s.name,
        print "我是静态方法."
mc = MyClass()
mc.func1()
MyClass.classFun()

调用静态方法:

    @staticmethod
    def staticFun():
        print MyClass.name,    
        print "我是静态方法."
mc = MyClass()
mc.func1()
MyClass.classFun()
MyClass.staticFun()

调用内置方法:

class MyClass(object):
    name = 'Test'
    def __init__(self):
        self.func1()
        self.__func2()
        self.classFun()
        self.staticFun()
    def func1(self):
        print self.name,
        print "我是公有方法."
    def __func2(self):
        print self.name,
        print "我是私有方法."
    @classmethod
    def classFun(self):
        print self.name,
        print "我是类方法."
    @staticmethod
    def staticFun():
        print MyClass.name,
        print "我是静态方法."
mc = MyClass()

原文地址:http://blog.51cto.com/fengyunshan911/2060037

时间: 2025-01-09 09:19:27

Python中类的继承及类的属性和方法总结的相关文章

python3 类的属性、方法、封装、继承及小实例

Python 类 Python中的类提供了面向对象编程的所有基本功能:类的继承机制允许多个基类,派生类可以覆盖基类中的任何方法,方法中可以调用基类中的同名方法. 对象可以包含任意数量和类型的数据. python类与c++类相似,提供了类的封装,继承.多继承,构造函数.析构函数. 在python3中,所有类最顶层父类都是object类,与java类似,如果定义类的时候没有写出父类,则object类就是其直接父类. 类定义 类定义语法格式如下: class ClassName:    <statem

python—类的属性和方法总结

一.类的属性总结(类的属性定义在方法外,对象的属性定义在方法内) 理解: 类的(静态)属性:(人类的五官,理解为变量) 类的(动态)方法:(人类吃穿住行,理解为一个函数,至少带一个参数self,指向类本身) 对象:类的实例化,之后才能有属性和方法 1)类的属性,也是公有属性:类的私有属性 2)对象的公有属性:对象的私有属性 3)函数局部变量:全局变量 4)内置属性 #!/usr/bin/env python #encoding:utf-8 var6 = "全局变量var6" class

&lt;九&gt;面向对象分析之UML核心元素之设计类,类,属性,方法,可见性

设计类 --->设计类是系统实施中一个或多个对象的抽象.        --->设计类已经直接映射到实现代码了,因此设计类依赖于实施语言.另一方面,设计类来源于前期的系统分析,在统一过程中,类不是品空想像出来的.他们可以一一映射到前期系统分析的成果上.从这个观点出发,分析类的重要性就能够体现出来.分析类为设计类中多需要的界面,逻辑和数据提供了非常好的抽象基础,设计类可以非常容易和自然地从分析类中演化出来. 类        --->类对对象进行定义,而对象又实现(或成为实施)用例.类的来

java的接口、类、属性、方法各有哪些修饰符

参考博客:http://blog.csdn.net/cao_tao199612/article/details/7458245 1. 接口的修饰符只有:public 2. 类的修饰符分为:可访问控制符和非访问控制符两种. 可访问控制符是:公共类修饰符 public 非访问控制符有:抽象类修饰符 abstract :最终类修饰符 final 1.公共类修饰符 public : Java 语言中类 的可访问控制符只有一个: public 即公共的.每个 Java 程序的主类都必须是 public 类

关于对象、类、属性和方法的理解

文章开头申明:半路出家的野路子,可能个人理解有所欠缺,希望不吝赐教. 在初步学习java的过程中,往往都是绕不开面向对象的思想,说到对象或许挺多初学者和我一样只是听说过一个"万物皆对象"的说法,简单的记下对象包含属性和方法,然而实际使用的过程中往往有忽略这些东西,也就是犯浑了.个人的理解是希望将对象.类.属性和方法用一个例子来简单说明. 打个比方说我到商场买手机这个例子吧.我到了商场买手机,第一步自然就是向售货员提出我的要求:如手机大小.CPU.内存等等(属性),要求能拍照打电话首发短

波哥学JAVA,定义类 创建对象 实例化对象 属性 类调用属性或者方法

定义类 声明对象  创建对象 实例化对象 属性 对象调用属性或者方法 举例,下面定义类了一个类并声明属性,写了一个方法: 创建对象 实例化对象 属性 类调用属性或者方法

Delphi 正则表达式之TPerlRegEx 类的属性与方法(1): 查找

Delphi 正则表达式之TPerlRegEx 类的属性与方法(1): 查找 //查找是否存在 var   reg: TPerlRegEx; begin   reg := TPerlRegEx.Create(nil);   reg.Subject := 'CodeGear Delphi 2007 for Win32';   reg.RegEx  := '\d';   if reg.Match then     ShowMessage('找到了')   else     ShowMessage('

Delphi 正则表达式之TPerlRegEx 类的属性与方法(2): 关于子表达式

Delphi 正则表达式之TPerlRegEx 类的属性与方法(2): 关于子表达式 // MatchedExpression 与 SubExpressions[0] var   reg: TPerlRegEx; begin   reg := TPerlRegEx.Create(nil);   reg.Subject := 'CodeGear Delphi 2007';   reg.RegEx  := 'Delphi';   while reg.MatchAgain do   begin    

Delphi 正则表达式之TPerlRegEx 类的属性与方法(4): Replace

Delphi 正则表达式之TPerlRegEx 类的属性与方法(4): Replace // Replace var   reg: TPerlRegEx; begin   reg := TPerlRegEx.Create(nil);   reg.RegEx  := 'ab';   reg.Replacement := '◆';   reg.Subject := 'ababab';   reg.ReplaceAll;   ShowMessage(reg.Subject); //返回: ◆◆◆