马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
面向对象编程中,编写表现实际天下中的事物和情形的类(class),并基于这些类来创建对象(object)。根据类来创建对象称为实例化,如许就可以使用类的实例(instance)
一、创建类
- class Dog:
- def __init__(self, name, age):
- """初始化属性 name 和 age"""
- self.name = name
- self.age = age
- def sit(self):
- """模拟小狗收到命令时坐下"""
- print(f"{self.name} 坐下")
- def roll_over(self):
- """模拟小狗收到命令时打滚"""
- print(f"{self.name} 打滚")
复制代码 Dog 类创建的每个实例都将存储名字和年事,而且每条小狗都有坐下(sit())和打滚(roll_over())的本事。
__init__() 方法:类中的函数称为方法,__init__() 是一个特别方法,每当根据 Dog 类创建新实例时,Python 都会自动运行它。在这个方法的名称中,开头和末端各有两个下划线,这是一种约定,可以制止 Python 默认方法与平常方法发生名称辩论。务必确保 __init__() 的两边都有两个下划线,否则当你使用类来创建实例时,将不会自动调用这个方法。
__init__() 方法界说成包罗三个形参:self、name 和 age。在这个方法的界说中,形参 self 必不可少,而且必须位于其他形参的前面。
当 Python 调用这个方法来创建 Dog 实例时,将自动传入实参 self。每个与实例相干联的方法调用都会自动通报实参 self,该实参是一个指向实例本身的引用,让实例可以大概访问类中的属性和方法。当我们创建 Dog 实例时,Python 将调用 Dog 类的 __init__() 方法。我们将通过实参向 Dog() 通报名字和年事;self 则会自动通报,不必要我们来通报。
在 __init__() 方法内界说的两个变量都有前缀 self 。以 self 为前缀的变量可供类中的全部方法使用,可以通过类的恣意实例来访问。self.name = name 获取与形参 name 相干联的值,并将其赋给变量 name,然后该变量被关联到当前创建的实例。像如允许通过实例访问的变量称为属性。
Dog 类还界说了别的两个方法:sit() 和 roll_over() 。由于这些方法实行时不必要额外的信息,因此只有一个形参 self。
二、创建实例
在上述创建类的根本上,我们可以根据类来创建类的实例如许就创建好实例了,接下来可以使用它的方法和属性了。
1、访问属性
2、调用方法
- my_dog.sit()
- my_dog.roll_over()
复制代码 三、使用类和实例
1、创建时给定属性默认值
- class Car:
- def __init__(self, make, model, year):
- self.make = make
- self.model = model
- self.year = year
- self.meter = 0 # 默认为0
- def update_meter(self, mile):
- self.meter = mile
复制代码 2、修改属性的值
修改属性的值紧张有三种方法:通过实例修改,通过方法设置,以及通过方法递增(增长特定的值)。
实例修改:- my_car = Car('aaa', 'a8', 2025)
- my_car.meter = 100
- # 实例 my_car 中找到属性 meter,并将其值设置为 100
复制代码 方法修改:- my_car = Car('aaa', 'a8', 2025)
- my_car.update_meter(200)
复制代码 属性的值递增修改:也是使用实例的方法举行修改,可以试试。
四、继承
要编写的类是一个既有的类的特别版本,可使用继承。当一个类继承另一个类时,将自动得到后者的全部属性和方法。原有的类称为父类,而新类称为子类。子类不但继承了父类的全部属性和方法,还可界说本身的属性和方法。
1、子类的 __init__() 方法
在既有的类的根本上编写新类,通常要调用父类的 __init__() 方法。这将初始化在父类的 __init__() 方法中界说的全部属性,从而让子类也可以使用这些属性。- class Car:
- def __init__(self, make, model, year):
- """初始化描述汽车的属性"""
- self.make = make
- self.model = model
- self.year = year
- self.meter = 0
- def get_descriptive_name(self):
- long_name = f"{self.year} {self.make} {self.model}"
- return long_name.title()
- def read_meter(self):
- print(f"这车开了 {self.meter} km")
- def update_meter(self, mile):
- if mile >= self.meter:
- self.meter = mile
- else:
- print("只能增加,不能减少的,孩子")
- def increment_meter(self, miles):
- self.meter += miles
- class ElectricCar(Car):
- """电动汽车"""
- def __init__(self, make, model, year):
- """初始化父类的属性"""
- super().__init__(make, model, year)
- my_uu = ElectricCar('BYD', 'UU', 2025)
- print(my_uu.get_descriptive_name())
复制代码 电动汽车是汽车的子类,具备 Car 类的全部功能。在界说子类时,必须在括号内指定父类的名称。__init__() 方法继承创建 Car 实例所需的信息,super() 是一个特别的函数,让我们可以大概调用父类的方法。父类也称为超类。
2、给子类界说属性和方法
- class ElectricCar(Car):
- """电动汽车"""
- def __init__(self, make, model, year):
- """初始化父类的属性"""
- super().__init__(make, model, year)
- my_uu = ElectricCar('BYD', 'UU', 2025)
- print(my_uu.get_descriptive_name())
- # 新增属性
- self.battery_size = 40
- # 新增方法
- def describe_battery(self):
- print(f"电池容量为{self.battery_size}-kWh.")
复制代码 3、重写父类中的方法
在子类中界说一个与要重写的父类方法同名的方法。如许,Python 将忽略这个父类方法,只关注在子类中界说的相应方法。
4、将实例用作属性
使用代码模拟实物时,你大概会发现本身给类添加了太多细节:属性和方法越来越多,文件越来越长。在这种环境下,大概必要将类的一部分提取出来,作为一个独立的类。将大型类拆分成多个协同工作的小类,这种方法称为组合。- class Car:
- #####
- class Battery:
- def __init__(self, battery_size=75):
- """初始化电池的属性"""
- self.battery_size = battery_size
- def describe_battery(self):
- print(f"电池容量为-{self.battery_size}-kWh.")
- class ElectricCar(Car):
- """电动汽车"""
- def __init__(self, make, model, year):
- """初始化父类的属性"""
- super().__init__(make, model, year)
- my_uu = ElectricCar('BYD', 'UU', 2025)
- print(my_uu.get_descriptive_name())
- self.battery = Battery()
复制代码 界说了一个名为 Battery 的新类,在 ElectricCar 类中,添加一个名为 self.battery 的属性。这行代码让Python 创建一个新的 Battery 实例。当 __init__() 方法被调用时,都将实行该操纵,因此如今每个 ElectricCar 实例都包罗一个自动创建的 Battery 实例。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
|