面向对象编程之Python类

1.理论:

数据成员/成员属性:就是类中的变量。

对象:对象包括数据成员和方法。

类的方法:在类的内部,使用 def 关键字来定义一个方法,与一般函数定义不同,类方法必须包含形式参数 self, 且为第一个参数。

实例化:创建一个类的具体对象。

类属性:即直接在类中定义而不是在方法中定义的属性。

self:self 代表类的实例。

实例属性:即在类的方法中通过self.xxx定义的属性。

私有属性:主要用途是封装,即隐藏类的内部实现细节,防止外部直接访问或修改敏感数据,从而增强代码的安全性和可维护性。私有属性可以通过类内方法间接访问或者强制访问。

局部变量:定义在方法中的变量,仅支持方法内部访问,在方法调用时创建,调用结束时销毁,可以与方法外部变量同名而不冲突。

类(Class): 相同类型的对象通过分类和抽象后得出共同的特征和行为而形成类。它允许你创建自定义的数据结构,包含数据和数据操作方法。创建一个类之后,可以通过类名访问其类属性。

面向对象编程:它的关键是如何合理地定义和组织类以及类之间的关系。面向对象编程能够更好地支持代码复用和设计复用。

构造方法:类有一个名为'init()'的特殊方法(构造方法),该方法在类实例化时会自动调用,可以接收参数,它的第一个参数必须是'self',代表实例对象本身,如果没有定义'init',Python会提供一个默认的空构造方法,构造方法不应该返回任何值(除了None)。

继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个Dog类型的对象派生自Animal类,这是模拟"是一个(is-a)"关系(例图,Dog是一个Animal)。

多继承:类的继承机制允许多个基类。要注意圆括号中父类的顺序,若是父类中有相同的方法名,而在子类使用时未指定,python会从左至右搜索,即方法在子类中未找到时,从左到右查找父类中是否包含方法。

方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。


2.实操:

2.1. 类和私有属性定义

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岁,体重%dkg"%(self.name, self.age, self.__weight))

c = People('小王', 23, 66) #实例化
c.speak()
# c.name或People.name访问类属性
#print(c.__weight) #不能直接访问私有属性,否则会报错:AttributeError

 结果:

 

2.2. 类的单继承和方法重写 

类属性会自动继承,而实例属性需要调用父类的__init__方法才能继承 

class Parent:
    def method(self):
        print("调用父类")
        
#定义子类
class Child(Parent):
    #方法重写
    def method(self):
        print("调用子类")

c = Child()
# c.method()            
super(Child, c).method()#用子类对象调用父类已被覆盖的方法

 结果:

2.3. 类的多继承 

定义结构如下: class DerivedClassName(Base1, Base2, Base3): statement_1 . . . statement_n

#父类定义
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岁,体重%dkg"%(self.name, self.age, self.__weight))

#另一个父类
class speaker:
    topic = ''
    home = ''
    def __init__(self, h, t):
        self.home = h
        self.topic = t

    def speak(self):
        print("我来自%s,我演讲的主题是%s"%(self.home, self.topic))

#多继承
class sample(people, speaker):
    def __init__(self, n, a, w, h, t):
        #同时继承两个父类的构造函数,然后下面不指定是谁的speak(),观察最终调用的是哪个基类的方法
        people.__init__(self, n, a, w)
        speaker.__init__(self, h, t)

#实例化
test = sample('tom', 23, 66, 'China', 'python')
#继承基类的公共成员方法,两个基类都有speak()方法,而下面未指定,则默认调用括号中排在前面的基类的
test.speak()

结果:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

° 小新 °

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值