编写类的时候,是定义一大类对象都有的通用行为(共性)
比如一个关于任何🐶的类Dog,表示的是all dogs
大体上具有名字,年龄,蹲下和打滚的共性
class Dog():
""" very first try """
def __init__(self, name, age,):
"""initiate name and age"""
self.name = name
self.age = age
def sit(self):
print(self.name.title() + " is now sitting")
def roll_over(self):
print(self.name.title() + " rolled over!")
⚠️:
- 首字母大写名称指的是类,其中Dog()中的()是空的,因为是从空白创建这个类
- 类中的函数称为 方法,
对于__init__
(特定),开头结尾各俩下划线,每次根据Dog创造新的实例的时候就会自动运行
其中定义的三个实参,self, name ,age。 self是必不可少且必须位于最前的。
当调用__init__创建Dog实例时,将自动传入实参self,不需要传递值。
每个与类相关联的方法调用都自动传递实参self,是指向实例本身的引用 - 以self为前缀的变量可以供类中的所有方法使用,可以通过类的任何实例来访问变量。
self.name = name
获取存储在形参name中的值,并将其存储在变量name中,然后该变量name被关联到当前创建的实例中。
可以通过实例访问的变量(name,age)称为属性。
根据类创建实例
class Dog()后
my_dog = Dog('Lucas', 6)
print("my dog's name is " + my_dog.name + ".")
print("my dog is " + str(my_dog.age) + ".")
当传递实参时,调用了Dog类中的方法__init__(),方法__init__创建了一个表示特定小狗的示例。方法__init__并未显式包含return语句,但自动返回一个表示这条🐶的实例。利用变量my_dog储存这个实例。
首字母大写的名称Dog表示类
小写的名称my_dog指的是根据类创建的实例
访问属性用句点表示法即可,my_dog.name
默认值
类中的每个属性都必须有初始值,哪怕这个值是0或者空字符串。在方法__init__()内指定这种初始值时,无需包含为它提供初始值的形参。
class Car:
def __init__(self, make, model, year):
self.make = make
self.model = model
self.year = year
self.odometer = 0
def descriptive_name(self):
long_name = str(self.year) + ' ' + self.make + ' ' + self.model
return long_name.title()
def miles(self):
print('this car has ' + str(self.odometer) + " miles on it. ")
my_new_car = Car('audi', 'a4', 2016)
print(my_new_car.descriptive_name())
my_new_car.miles()
>
>2016 Audi A4
this car has 0 miles on it.
继承
创建子类时,最首先的任务是给父类所有属性赋值。子类的方法__init__需要父类施以援手?????
电动汽车属于汽车,故以电动汽车作为子类,这样就只需为电动汽车特有的属性和行为编码。
class Car:
def __init__(self, make, model, year):
self.make = make
self.model = model
self.year = year
self.odometer = 0
def descriptive_name(self):
long_name = str(self.year) + ' ' + self.make + ' ' + self.model
return long_name.title()
def update_odometer(self, mileage):
"""set the reading to referred value"""
self.odometer = mileage
def miles(self):
print('this car has ' + str(self.odometer) + " miles on it. ")
class ElectricCar(Car):
def __init__(self, make, model, year):
“”“初始化父类的属性”“”
super().__init__(make, model, year)
my_tesla = ElectricCar('tesla', 'model s', 2016)
print(my_tesla.descriptive_name())
⚠️:
1.创建子类时,父类必须包含在当前文件中,且位于子类前面。
2.定义子类时,必须在括号内指定父类的名称,方法__init__必须接受创建Car实例所需的信息
class ElectricCar(Car):
3.super()是一个特殊函数,将父类和子类联系起来
super().__init__(make, model, year)
这行代码调用父类方法__init__(),让Electricity实例包含父类的所有属性
4.
class ElectricCar(Car):
def __init__(self, make, model, year):
“”“初始化父类的属性”“”
super().__init__(make, model, year)
my_tesla = ElectricCar('tesla', 'model s', 2016)
创建一个E car的实例,并将其储存在变量my_tesla中,调用E Car类中定义的方法__init__(),init()🉑️调用Car中定义的方法__init__()