类
创建和使用类以及根据实参来创造事例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 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") my_dog = Dog("willie",6) print(f"my dog's name is {my_dog.name}") print(f"my dog's age is {my_dog.age}")
1 2 my dog's name is willie my dog's age is 6
这里的”init ()“是一种特殊的方法,每当你想要根据Dog类创建新的实例的时候,Python就会自动运行它。在这个方法的名称中,开头和结尾默认都有2个下划线,这是为了避免Python将他和其他的普通的方法名称发生冲突。在这个方法的定义的时候,形参self是必不可少的,而且必须为与其他的形参的前面。因为Python在调用这个函数的时候,将会自动传入实参self,每个与实例相关联的方法调用都自动传递实参self,它起到一个指向实例的作用,让实例能够访问类中的属性和方法。后面的def中变量都有前缀self,以self为前缀的变量可供给类中的所有方法使用,可以通过类的所有实例来访问。可通过实例访问的变量称之为属性。
Dog类还定义了来年各个方法:sit()和roll_over。这些方法执行时不需要额外的信息,因此他们只有一个形参self、
1.访问属性 my_dog.name
2.调用方法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 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") my_dog = Dog("willie",6) print(f"my dog's name is {my_dog.name}") print(f"my dog's age is {my_dog.age}") my_dog.sit() my_dog.roll_over()
1 2 3 4 my dog's name is willie my dog's age is 6 willie is now sitting willie rolled over
3.创造多个实例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 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") my_dog = Dog("willie",6) your_dog = Dog("annn",2) print(f"my dog's name is {my_dog.name}") print(f"my dog's age is {my_dog.age}") my_dog.sit() my_dog.roll_over() print(f"your dog's name is {your_dog.name}") your_dog.sit() print(f"your dog can roll over,{your_dog.name},how old is your dog {your_dog.age}") your_dog.roll_over()
1 2 3 4 5 6 7 8 my dog's name is willie my dog's age is 6 willie is now sitting willie rolled over your dog's name is annn annn is now sitting your dog can roll over,annn,how old is your dog 2 annn rolled over
使用类和实例 1 2 3 4 5 6 7 8 9 10 11 class car: def __init__(self,maek,model,year): self.make = maek self.model = model self.year = year def get_descript_name(self): long_name = f"{self.year} {self.model} {self.make}" return long_name.title() my_new_car = car('Aodi','a4','2019') print(my_new_car.get_descript_name())
给属性指定默认值 创建实例时,有些属性无需通过形参来定义,可以再方法”init ()”中为其指定默认值。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 class car: def __init__(self,maek,model,year): self.make = maek self.model = model self.year = year self.odometer_reading=0 def read_odometer(self): print(f"this car has {self.odometer_reading} mile on it") def get_descript_name(self): long_name = f"{self.year} {self.model} {self.make}" return long_name.title() my_new_car = car('Aodi','a4','2019') print(my_new_car.get_descript_name()) my_new_car.read_odometer()
1 2 2019 A4 Aodi this car has 0 mile on it
修改属性的值 直接修改 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 class car: def __init__(self,maek,model,year): self.make = maek self.model = model self.year = year self.odometer_reading=0 def read_odometer(self): print(f"this car has {self.odometer_reading} mile on it") def get_descript_name(self): long_name = f"{self.year} {self.model} {self.make}" return long_name.title() my_new_car = car('Aodi','a4','2019') print(my_new_car.get_descript_name()) my_new_car.odometer_reading = 23 my_new_car.read_odometer()
1 2 2019 A4 Aodi this car has 23 mile on it
通过方法修改属性的值 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 class car: def __init__(self,maek,model,year): self.make = maek self.model = model self.year = year self.odometer_reading=0 def read_odometer(self): print(f"this car has {self.odometer_reading} mile on it") def undate_odometer(self,milliage): self.odometer_reading = milliage def get_descript_name(self): long_name = f"{self.year} {self.model} {self.make}" return long_name.title() my_new_car = car('Aodi','a4','2019') print(my_new_car.get_descript_name()) my_new_car.undate_odometer(23) my_new_car.read_odometer()
1 2 2019 A4 Aodi this car has 23 mile on it
通过方法对属性的值进行递增 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 from builtins import print class car: def __init__(self, maek, model, year): self.make = maek self.model = model self.year = year self.odometer_reading = 0 def read_odometer(self): print(f"this car has {self.odometer_reading} mile on it") def undate_odometer(self, milliage): self.odometer_reading = milliage def get_descript_name(self): long_name = f"{self.year} {self.model} {self.make}" return long_name.title() def increaing_odometer(self, miles): self.odometer_reading += miles my_new_car = car('Aodi', 'a4', '2019') print(my_new_car.get_descript_name()) my_new_car.undate_odometer(666) my_new_car.read_odometer() my_new_car.increaing_odometer(1000) print(my_new_car.read_odometer())
1 2 3 4 2019 A4 Aodi this car has 666 mile on it this car has 1666 mile on it None
?这个none是怎么蹦出来的?
继承 子类的方法init
在既有类的基础上编写新的类的时候,通常会调用父类的方法inti 。浙江初始化在父类init ()方法来定义的所有属性,从而让子类包含这些属性。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 from builtins import print class car: def __init__(self, maek, model, year): self.make = maek self.model = model self.year = year self.odometer_reading = 0 def read_odometer(self): print(f"this car has {self.odometer_reading} mile on it") def undate_odometer(self, milliage): self.odometer_reading = milliage def get_descript_name(self): long_name = f"{self.year} {self.model} {self.make}" return long_name.title() def increaing_odometer(self, miles): self.odometer_reading += miles class electorcar(car): def _init_(self,make,model,year): super()._init_(maek,model.year) my_tesia = electorcar('tesla','model s','2020') print(my_tesia.get_descript_name())
这里super()是一个特殊函数,使得你可以调用弗雷德方法。这一行代码能够使得python调用car类的方法init ,让electorcar实例能够包含这个方法的所有属性。父类也称之为超类。
给子类定义属性和方法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 from builtins import print, super class car: def __init__(self, maek, model, year): self.make = maek self.model = model self.year = year self.odometer_reading = 0 def read_odometer(self): print(f"this car has {self.odometer_reading} mile on it") def undate_odometer(self, milliage): self.odometer_reading = milliage def get_descript_name(self): long_name = f"{self.year} {self.model} {self.make}" return long_name.title() def increaing_odometer(self, miles): self.odometer_reading += miles class electorcar(car): def __init__(self,make,model,year): super().__init__(make,model,year) self.battery_size = 75 def describe_battery(self): print(f"this car has a {self.battery_size} - km battery") my_tesla = electorcar('tesla','model s',2020) print(my_tesla.get_descript_name()) my_tesla.describe_battery()
1 2 2020 Model S Tesla this car has a 75 - km battery
重写父类的方法 对于父类的方法重写,可以在子类中定义一个与要冲写的父类方法同名的方法。
将实例当做属性 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 from builtins import print, super class car: def __init__(self, maek, model, year): self.make = maek self.model = model self.year = year self.odometer_reading = 0 def read_odometer(self): print(f"this car has {self.odometer_reading} mile on it") def undate_odometer(self, milliage): self.odometer_reading = milliage def get_descript_name(self): long_name = f"{self.year} {self.model} {self.make}" return long_name.title() def increaing_odometer(self, miles): self.odometer_reading += miles class Battery: def __init__(self,battery_size=75): self.battery_size = battery_size def describe_battery(self): print(f"this car has a {self.battery_size}-kwh battery.") class electorcar(car): def __init__(self,make,model,year): super().__init__(make, model,year) self.battery= Battery() my_tesla = electorcar('tesla','model s',2020) print(my_tesla.get_descript_name()) my_tesla.battery.describe_battery()
1 2 2020 Model S Tesla this car has a 75-kwh battery.
导入类 导入所有类的时候
使用别名