面向对象编程概述-python

面向对象编程(OOP)是一种编程范式,它使用“对象”来设计软件。在Python中,对象是类的实例,类则定义了这些对象应该具备的属性和方法。

类的基本概念

类:描述了一组具有共同属性和方法的对象。

对象:是类的实例。

方法:类中定义的函数。

属性:类中定义的数据成员,包括类变量和实例变量。

继承:子类可以从父类继承属性和方法。

多继承:一个子类可以继承多个父类。

方法重写:子类可以重写父类的方法以提供不同的实现。

构造方法:__init__(),在对象创建时被调用。

私有成员:双下划线__开头的属性或方法只能在类内部访问。

# 定义一个基础类

class Person:

    def __init__(self, name, age):

        self.name = name

        self.age = age



    def speak(self):

        print(f"{self.name} 说: 我 {self.age} 岁。")



# 定义一个继承自Person的子类

class Student(Person):

    def __init__(self, name, age, grade):

        super().__init__(name, age)  # 调用父类构造器

        self.grade = grade

    def speak(self):  # 方法重写

        print(f"{self.name} 说: 我 {self.age} 岁了,我在读 {self.grade} 年级。")



# 定义另一个类

class Speaker:

    def __init__(self, name, topic):

        self.name = name

        self.topic = topic



    def speak(self):

        print(f"我叫 {self.name},我是一个演说家,我演讲的主题是 {self.topic}。")



# 多继承示例

class Sample(Speaker, Student):

    def __init__(self, name, age, grade, topic):

        Student.__init__(self, name, age, grade)  # 调用Student构造器

        Speaker.__init__(self, name, topic)      # 调用Speaker构造器



# 运算符重载示例

class Vector:

    def __init__(self, a, b):

        self.a = a

        self.b = b



    def __str__(self):

        return f'Vector ({self.a}, {self.b})'



    def __add__(self, other):

        return Vector(self.a + other.a, self.b + other.b)



# 测试代码

if __name__ == "__main__":

    s = Sample("Tim", 25, 4, "Python")

    s.speak()



    v1 = Vector(2, 10)

    v2 = Vector(5, -2)

    print(v1 + v2)

这段代码展示了如何定义类、继承、方法重写以及如何实现运算符重载。通过这些基本概念的理解和实践。

类的私有成员

在Python中,虽然没有严格的私有成员,但可以通过约定来表明某些属性或方法不应该在类的外部使用。这通常是通过在属性或方法名称前加上两个下划线__来实现的。这种命名方式会导致Python解释器对名称进行修改(名称改写),使得直接访问变得困难。

私有属性示例

class Counter:

    __secret_count = 0  # 私有变量

   

    def count(self):

        self.__secret_count += 1

        print(f"计数: {self.__secret_count}")



c = Counter()

c.count()  # 输出: 计数: 1

c.count()  # 输出: 计数: 2

print(c._Counter__secret_count)  # 可以通过名称改写的方式访问,但不推荐

类的私有方法

类似地,方法也可以通过添加双下划线前缀来标记为私有。

私有方法示例

class WebSite:

    def __init__(self, name, url):

        self.name = name

        self.__url = url  # 私有变量

       

    def who(self):

        print(f'网站名称: {self.name}')

        print(f'网址: {self.__url}')



    def __private_method(self):  # 私有方法

        print("这是一个私有方法,只能在类的内部调用。")



    def public_method(self):

        self.__private_method()  # 在类的内部调用私有方法

        print("这是一个公共方法。")

ws = WebSite("示例网站", "http://example.com")

ws.who()

ws.public_method()

# ws.__private_method()  # 将会抛出错误,因为这是私有的

类的专有方法

Python中的一些专有方法,如__init__和__str__,可以让类的行为更加符合预期。下面列出了一些常用的专有方法:

__init__(self, ...):构造函数,在创建对象时被调用。

__del__(self):析构函数,在删除对象时被调用。

__repr__(self):返回对象的字符串表示,主要用于调试。

__str__(self):返回用户友好的字符串表示。

__add__(self, other):重载加法运算符。

__len__(self):重载内置函数len()。

重载__len__方法示例

class StringList:

    def __init__(self):

        self.items = []



    def add(self, item):

        self.items.append(item)



    def __len__(self):

        return len(self.items)



sl = StringList()

sl.add("Hello")

sl.add("World")

print(len(sl))  # 输出: 2

这篇文章就到这里,祝大家学习快乐

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值