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_
本文来自博客园,作者:雨-铃,原文链接:https://www.cnblogs.com/yuling25/p/15263211.html