文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

从零开始学习Python面向对象编程,你还在等什么?

2024-11-30 11:47

关注

一、类和对象

1、什么是类和对象

面向对象编程是一种编程范式,它将程序中的数据和操作封装在一个对象中,通过调用对象的方法来实现对数据的操作。在Python中,类是一种用户自定义的数据类型,它可以用来创建对象。对象是类的实例,它包含了数据和方法。

2、类的定义和实例化

在Python中,可以使用class关键字来定义类,类名习惯以大写字母开头。类包含了属性和方法,属性是类的数据成员,方法是类的函数成员。在类中,可以使用self关键字来引用当前对象的属性和方法。

class MyClass:
    def __init__(self, name):
        self.name = name

    def say_hello(self):
        print("Hello, " + self.name + "!")

# 实例化对象
obj = MyClass("world")

# 调用对象的方法
obj.say_hello()  # 输出:Hello, world!

3、对象的属性和方法

对象的属性是指对象所包含的数据成员,对象的方法是指对象所包含的函数成员。在Python中,对象的属性和方法可以通过点号(.)来访问。

class MyClass:
    def __init__(self, name):
        self.name = name

    def say_hello(self):
        print("Hello, " + self.name + "!")

# 实例化对象
obj = MyClass("world")

# 访问对象的属性和方法
print(obj.name)  # 输出:world
obj.say_hello()  # 输出:Hello, world!

二、继承和多态

1、继承的概念和实现

继承是指一个类可以获得另一个类的属性和方法,从而避免重复编写代码,提高代码的复用性和扩展性。在Python中,可以使用class关键字来定义继承关系,使用super()函数来调用父类的方法。

class Animal:
    def __init__(self, name):
        self.name = name

    def eat(self):
        print(self.name + " is eating.")

class Cat(Animal):
    def __init__(self, name, color):
        super().__init__(name)
        self.color = color

    def meow(self):
        print(self.name + " is meowing.")

# 实例化对象
cat = Cat("Tom", "white")

# 调用对象的属性和方法
print(cat.name)  # 输出:Tom
print(cat.color)  # 输出:white
cat.eat()  # 输出:Tom is eating.
cat.meow()  # 输出:Tom is meowing.

2、多态的概念和实现

多态是指同一种类型的对象,调用同一个方法可以产生不同的结果。在Python中,多态可以通过方法的重写和方法的重载来实现。

方法的重写是指子类重新定义父类中已有的方法,从而实现对方法的覆盖。

class Animal:
    def __init__(self, name):
        self.name = name

    def eat(self):
        print(self.name + " is eating.")

class Cat(Animal):
    def __init__(self, name, color):
        super().__init__(name)
        self.color = color

    def eat(self):
        print(self.name + " is eating fish.")

# 实例化对象
cat = Cat("Tom", "white")

# 调用对象的方法
cat.eat()  # 输出:Tom is eating fish.

方法的重载是指在一个类中定义多个同名的方法,但是这些方法的参数类型和个数不同,从而实现对方法的扩展。

class MyClass:
    def my_method(self):
        print("my_method() without parameter")

    def my_method(self, x):
        print("my_method() with parameter: " + str(x))

# 实例化对象
obj = MyClass()

# 调用对象的方法
obj.my_method()  # 报错:TypeError: my_method() missing 1 required positional argument: 'x'
obj.my_method(123)  # 输出:my_method() with parameter: 123

三、抽象类和接口

1、抽象类的定义和实现

抽象类是指不能被实例化的类,它只能作为其他类的父类,用于定义抽象方法和属性。在Python中,可以使用abc模块来定义抽象类,使用@abstractmethod装饰器来定义抽象方法和属性。

from abc import ABC, abstractmethod

class Animal(ABC):
    @abstractmethod
    def eat(self):
        pass

class Cat(Animal):
    def eat(self):
        print("Cat is eating fish.")

# 实例化对象
cat = Cat()

# 调用对象的方法
cat.eat()  # 输出:Cat is eating fish.

2、接口的定义和实现

接口是指一组抽象方法和属性的集合,用于描述类所提供的服务。在Python中,接口并没有严格的定义,一般使用抽象类来实现接口的功能。

from abc import ABC, abstractmethod

class IAnimal(ABC):
    @abstractmethod
    def eat(self):
        pass

class Cat(IAnimal):
    def eat(self):
        print("Cat is eating fish.")

# 实例化对象
cat = Cat()

# 调用对象的方法
cat.eat()  # 输出:Cat is eating fish.

四、特殊方法

1、 __init__方法

__init__方法是指类的构造方法,它在类实例化时自动调用,用于初始化对象的属性。在Python中,可以使用__init__方法来定义类的构造方法。

class MyClass:
    def __init__(self, name):
        self.name = name

# 实例化对象
obj = MyClass("world")

# 访问对象的属性
print(obj.name)  # 输出:world

2、__str__方法

__str__方法是指类的字符串表示方法,它可以将类对象转换为字符串类型,用于打印对象时的输出。在Python中,可以使用__str__方法来定义类的字符串表示方法。

class MyClass:
    def __init__(self, name):
        self.name = name

    def __str__(self):
        return "MyClass(name=" + self.name + ")"

# 实例化对象
obj = MyClass("world")

# 打印对象
print(obj)  # 输出:MyClass(name=world)

3、其他常用的特殊方法

在Python中,还有许多其他常用的特殊方法,如__eq__方法用于判断两个对象是否相等,__lt__方法用于判断一个对象是否小于另一个对象,__len__方法用于获取对象的长度等。

五、访问控制

1、公有、私有和保护成员

在Python中,可以使用下划线(_)来定义公有、私有和保护成员。公有成员是指可以被任何对象访问的成员,私有成员是指只能被类内部访问的成员,保护成员是指只能被类内部和子类访问的成员。

class MyClass:
    def __init__(self, name, age):
        self.name = name  # 公有成员
        self._age = age  # 保护成员
        self.__gender = "male"  # 私有成员

    def say_hello(self):
        print("Hello, " + self.name + "!")

    def get_gender(self):
        return self.__gender

# 实例化对象
obj = MyClass("Tom", 18)

# 访问对象的属性和方法
print(obj.name)  # 输出:Tom
print(obj._age)  # 输出:18
print(obj.get_gender())  # 输出:male
print(obj.__gender)  # 报错:AttributeError: 'MyClass' object has no attribute '__gender'

2、访问控制的实现方式

在Python中,访问控制并不是强制性的,只是一种约定俗成的规范。如果希望强制实现访问控制,可以使用属性装饰器@property、@属性名.setter和@属性名.deleter来限制属性的访问。

class MyClass:
    def __init__(self, name, age):
        self.name = name
        self._age = age

    @property
    def age(self):
        return self._age

    @age.setter
    def age(self, value):
        if value < 0:
            raise ValueError("Age cannot be negative.")
        self._age = value

    @age.deleter
    def age(self):
        del self._age

# 实例化对象
obj = MyClass("Tom", 18)

# 访问对象的属性
print(obj.name)  # 输出:Tom
print(obj.age)  # 输出:18

# 修改对象的属性
obj.age = 20
print(obj.age)  # 输出:20

# 删除对象的属性
del obj.age
print(obj.age)  # 报错:AttributeError: 'MyClass' object has no attribute '_age'

六、代码示例

下面是一个完整的示例代码,包括类和对象的定义和使用、继承和多态的实现、抽象类和接口的定义和实现、特殊方法和访问控制的实现。

from abc import ABC, abstractmethod

# 定义动物类
class Animal(ABC):
    def __init__(self, name):
        self.name = name

    @abstractmethod
    def eat(self):
        pass

# 定义猫类
class Cat(Animal):
    def __init__(self, name, color):
        super().__init__(name)
        self.color = color

    def eat(self):
        print(self.name + " is eating fish.")

    def __str__(self):
        return "Cat(name=" + self.name + ", color=" + self.color + ")"

# 定义狗类
class Dog(Animal):
    def __init__(self, name, breed):
        super().__init__(name)
        self.breed = breed

    def eat(self):
        print(self.name + " is eating meat.")

    def __str__(self):
        return "Dog(name=" + self.name + ", breed=" + self.breed + ")"

# 定义接口类
class IShout(ABC):
    @abstractmethod
    def shout(self):
        pass

# 定义黄狗类
class YellowDog(Dog, IShout):
    def __init__(self, name, breed):
        super().__init__(name, breed)

    def shout(self):
        print(self.name + " is shouting: Wow, wow!")

    def __str__(self):
        return "YellowDog(name=" + self.name + ", breed=" + self.breed + ")"

# 实例化对象
cat = Cat("Tom", "white")
dog = Dog("Spike", "bulldog")
yellow_dog = YellowDog("Charlie", "golden retriever")

# 调用方法
cat.eat()  # 输出:Tom is eating fish.
dog.eat()  # 输出:Spike is eating meat.
yellow_dog.eat()  # 输出:Charlie is eating meat.
yellow_dog.shout()  # 输出:Charlie is shouting: Wow, wow!

# 输出对象的字符串表示
print(cat)  # 输出:Cat(name=Tom, color=white)
print(dog)  # 输出:Dog(name=Spike, breed=bulldog)
print(yellow_dog)  # 输出:YellowDog(name=Charlie, breed=golden retriever)
来源:今日头条内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯