Python-类

1 创建和使用类

1.1 创建 Dog 类

根据 Dog 类创建的每个实例都将存储名字和年龄,我们赋予了每条小狗蹲下(sit())和打 滚(roll_over())的能力:

class Dog:#定义类
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def sit(self):
        print(f"{self.name} is now sitting")

    def roll_over(self):
        print(f"{self.name} rolled over")
方法 __init__()

类中的函数称为方法。每当根据类创建新实例时,Python 会自动调用这个 __init__() 方法,

在这个方法的定义中,形 参 self 必不可少,而且必须位于其他形参的前面。为何必须在方法定义中包含形参 self 呢?因 为 Python 调用这个方法来创建 Dog 实例时,将自动传入实参 self。每个与实例相关联的方法调 用都自动传递实参 self,它是一个指向实例本身的引用,让实例能够访问类中的属性和方法。创 建 Dog 实例时,Python 将调用 Dog 类的方法__init__()。我们将通过实参向 Dog()传递名字和年 龄,self 会自动传递,因此不需要传递它。每当根据 Dog 类创建实例时,都只需给最后两个形参 (name 和 age)提供值。

1.2 根据类创建实例

my_dog = Dog('willie', 8)
print(f"my dog's name is {my_dog.name}")
print(f"my dog is {my_dog.age} years old")
#my dog's name is willie
#my dog is 8 years old
1.2.1 访问属性
my_dog.name
my_dog.age
1.2.2 调用方法
my_dog.sit()
my_dog.roll_over()
1.2.3 创建多个实例
my_dog = Dog('Willie', 6)
your_dog = Dog('Lucy', 3)
print(f"My dog's name is {my_dog.name}.")
print(f"My dog is {my_dog.age} years old.")
my_dog.sit()
print(f"\nYour dog's name is {your_dog.name}.")
print(f"Your dog is {your_dog.age} years old.")
your_dog.sit() 

2 继承

编写类时,并非总是要从空白开始。如果要编写的类是另一个现成类的特殊版本,可使用继 承。一个类继承另一个类时,将自动获得另一个类的所有属性和方法。原有的类称为父类,而新 类称为子类。子类继承了父类的所有属性和方法,同时还可以定义自己的属性和方法。

2.1 子类的方法__init__()

在已有的类基础上编写新类时,通常需要调用父类的方法__init__()>。这将初始化在父类 __init__()方法中定义的所有属性,从而让子类包含这些属性。

class Father:
    def __init__(self, sname, age):
        self.sname = sname
        self.age = age

    def info(self):
        print(f"{self.sname} is {self.age} years old ")


class Son(Father):
    def __init__(self, sname, age):
        super().__init__(sname, age)

student1 = Son('zhangsan', 18)
student1.info()
#zhangsan is 18 years old 

定义子类时,必须在圆括号内指定父类的名称。

super()是一个特殊的函数,它能够让子类调用父类的方法。父类也成为超类。

2.2 给子类定义属性和方法

让一个类继承另一个类后,就可以添加区分子类和父类所需的新属性和新方法了。

子类独有的属性和方法写在继承父类之后。

class Father:
    def __init__(self, sname, age):
        self.sname = sname
        self.age = age

    def info(self):
        print(f"{self.sname} is {self.age} years old ")

class Son(Father):
    def __init__(self, sname, age,sex):
        super().__init__(sname, age)
        self.sex = sex  #新属性

    def info_2(self):   #新方法
        if self.sex == '男':
            print(f"{self.sname} is a boy, he is {self.age} years old")
        else:
            print(f"{self.sname} is a girl, she is {self.age} years old")

student1 = Son('zhangsan', 18, '男')
student1.info_2()
student1 = Son('xiaohong', 20, '女')
student1.info_2()
#zhangsan is a boy, he is 18 years old
#xiaohong is a girl, she is 20 years old

2.3 重写父类方法

对于父类的方法,只要它不符合子类模拟的实物的行为,都可以进行重写。为此,可在子类 中定义一个与要重写的父类方法同名的方法。这样,Python 将不会考虑这个父类方法,而只关注 你在子类中定义的相应方法。

2.4 将实例用作属性

class Math1:
    def __init__(self, a=3, b=4):
        self.a = a
        self.b = b

    def add(self):
        print(f"{self.a} + {self.b} = {self.a + self.b}")

    def mult(self):
        print(f"{self.a} * {self.b} = {self.a * self.b}")

class Math2:
    def __init__(self, c, d):
        self.math1 = Math1()
        self.c = c
        self.d = d

    def cloth(self):
        print(f"{self.c} ** {self.d} = {self.c ** self.d}")

number1 = Math2(4, 5)
number1.math1.add()
#3 + 4 = 7

3 导入类

可以将类存储在模块中,然后 在主程序中导入所需的模块。

3.1 导入单个类

from module_name import class_name

3.2 导入多个多个类

from module_name import class_1, class_2...

3.3 导入整个模块

import module_name

3.4 导入模块中的所有类

from module_name import *

3.5 使用别名

from module_name import class_name as other_
posted @ 2021-09-13 17:00  雨-铃  阅读(47)  评论(0编辑  收藏  举报
Tips
复制成功!