第七周总结

面向对象程序设计

类的定义

class Car(object):    #定义一个类,派生自object类
    def showInfo(self):    #定义成员方法
        print("This is a car")

 

访问类中数据成员或成员的方法:

car = Car()
car.showInfo()

公有成员与私有成员

在定义类的成员时,如果成员名以两个下划线开头但是不易两个下划线结束则表示是私有成员。私有成员正在类的外部不能直接访问,一般是在类的内部进行访问和操作,或者在类的外部通过调用对象的公有成员来访问,而公有成员是可以公开使用的,既可以在类的内部进行访问,也可以在外部程序中使用。

复制代码
class Test:
    def __init__(self,value = 0):   #构造方法,创建对象时自动调用
        self.__value = value        #私有数据成员

    def setValue(self, value):  #公有成员方法,需要时显式使用
        self.__value = value    #在类内部可以直接访问私有成员

    def show(self):     #成员方法,公有成员
        print(self.__value)
复制代码

在Python中,以下划线开头或结束的成员名有特殊的含义:

·_xxx:以一个下划线开头,保护成员,一般建议在类对象和子类对象访问这些成员,不建议通过对象直接访问;在模块中使用一个或者多个下划线开头的成员不能用'from module import *'导入,除非在模块中使用__all__变量明确指明这样的成员可以被导入。

·__xxx:以两个下划线开头但不宜两个下划线结束,表示私有成员,一般只有类对象自己能访问,子类对象也不能访问该成员,但在对象外部可以通过“对象名._类名__xxx”这样的特殊形式来访问。

·__xxx__:前后各两个下划线,系统定义的特殊成员。


数据成员

数据成员用来描述类或对象的某些特征或属性,可以分为属干对象的数据成员和属于类的数据成员两类。

·属于对象的数据成员主要在构造方法__init__()中定义,而且在定义和在实例方法中访问数据成员时往往以 self 作为前缀,同一个类的不同对象的数据成员之间互不影响。

·属于类的数据成员的定义不在任何成员方法之内,是该类所有对象共享的,不属于任何一个对象。


 

成员方法

Python类的成员方法大致可以分为公有方法、私有方法、静态方法和类方法。公有方法和私有方法一般是指属于对象的实例方法,其中私有方法的名字以两个下划线“__”开始。公有方法通过对象名直接调用,私有方法不能通过对象名直接调用,只能在其他实例方法中通过前缀 self 进行调用或在外部通过特殊的形式来调用。

静态方法和类方法都可以通过类名和对象名调用,但在这两种方法中不能直接访问属于对象的成员,只能访问属于类的成员。一般以 cls 作为类方法的第一个参数表示该类自身,在调用类方法时不需要为该参数传递值,而静态方法则可以不接收任何参数。例如:

复制代码
class Root:
    __total = 0
    def __init__(self,v):       #构造方法,特殊方法
        self.__value = v
        Root.__total += 1

    def show(self):             #普通实例方法,以 self 作为第一个参数
        print('self.__value:',self.__value)
        print('self.__total:', self.__total)

    @classmethod
    def classShowTotal(cls):    #修饰器,声明类方法
        print(cls.__total)      #类方法,一般以 cls 作为第一个参数

    @staticmethod
    def staticShowTotal():      #修饰器,声明静态方法
        print(Root.__total)     #静态方法,可以没有参数
复制代码

继承

继承是一种设计复用和代码复用的机制。设计一个新类时,如果能够在一个已有的且设计良好的类的基础上进行适当扩展和二次开发,可以大幅度减少开发工作量,并且可以很大程度地保证质量。在继承关系中,已有的、设计好的类称为父类或基类,新设计的类称为子类或派生类。派生类可以继承父类的公有成员,但是不能继承其私有成员。如果需要在派生类中调用基类的方法,可以使用内置函数 super()或者通过“基类名.方法名()”的方式来实现这一目的。

 

posted @   灰幕  阅读(23)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示