__init__就是构造函数,self相当于this指针,只不过是必须写出来的,不能省
class Dog():
def __init__(self, name, 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!')
对类成员和方法的调用,各类语言都是相通的
my_dog = Dog('whllie', 6)
print("My dog's name is " + my_dog.name.title() + '.')
print("My dog is " + str(my_dog.age) + " years old")
my_dog.sit()
my_dog.roll_over()
My dog's name is Whllie.
My dog is 6 years old
Whllie is now sitting.
Whllie rolled over!
class Car():
def __init__(self, make, model, year):
self.make = make
self.model = model
self.year = year
def get_descriptive_name(self):
long_name = str(self.year) + ' ' + self.make + ' ' + self.model
return long_name
my_new_car = Car('audi', 'a4', 2016)
print(my_new_car.get_descriptive_name())
2016 audi a4
类属性可以有默认值
class Car():
def __init__(self, make, model, year):
self.make = make
self.model = model
self.year = year
self.odometer_reading = 0
def get_descriptive_name(self):
long_name = str(self.year) + ' ' + self.make + ' ' + self.model
return long_name.title()
def read_odometer(self):
print("This car has "+ str(self.odometer_reading)+' miles on it')
my_new_car = Car('audi', 'a4', 2016)
print(my_new_car.get_descriptive_name())
my_new_car.read_odometer()
2016 Audi A4
This car has 0 miles on it
类属性直接修改
my_new_car.odometer_reading=23
my_new_car.read_odometer()
This car has 23 miles on it
直接修改属性不太好,常规操作是通过方法修改
class Car():
def __init__(self, make, model, year):
self.make = make
self.model = model
self.year = year
self.odometer_reading = 0
def get_descriptive_name(self):
long_name = str(self.year) + ' ' + self.make + ' ' + self.model
return long_name.title()
def read_odometer(self):
print("This car has "+ str(self.odometer_reading)+' miles on it')
def update_odometer(self,mileage):
self.odometer_reading=mileage
my_new_car = Car('audi', 'a4', 2016)
print(my_new_car.get_descriptive_name())
my_new_car.read_odometer()
my_new_car.update_odometer(23)
my_new_car.read_odometer()
2016 Audi A4
This car has 0 miles on it
This car has 23 miles on it
众所周知,开倒车也不会让里程数减少
class Car():
def __init__(self, make, model, year):
self.make = make
self.model = model
self.year = year
self.odometer_reading = 0
def get_descriptive_name(self):
long_name = str(self.year) + ' ' + self.make + ' ' + self.model
return long_name.title()
def read_odometer(self):
print("This car has "+ str(self.odometer_reading)+' miles on it')
def update_odometer(self,mileage):
if mileage>self.odometer_reading:
self.odometer_reading=mileage
else:
print("You can't roll back an odometer!")
my_new_car = Car('audi', 'a4', 2016)
print(my_new_car.get_descriptive_name())
my_new_car.read_odometer()
my_new_car.update_odometer(23)
my_new_car.read_odometer()
my_new_car.update_odometer(13)
my_new_car.read_odometer()
2016 Audi A4
This car has 0 miles on it
This car has 23 miles on it
You can't roll back an odometer!
This car has 23 miles on it
类自然可以继承
定义子类时,必须在括号内指定父类的名称
super()是一个特殊函数,帮助Python将父类和子类关联起来。
这行代码让Python调用ElectricCar的父类的方法init(),让ElectricCar实例包含父类的所有属性。
父类也称为超类(superclass),名称super因此而得名
class ElectricCar(Car):
def __init__(self, make, model, year):
super().__init__(make, model, year)
my_tesla = ElectricCar('tesla', 'model s', 2018)
print(my_tesla.get_descriptive_name())
2018 Tesla Model S
添加子类独有属性
class ElectricCar(Car):
def __init__(self, make, model, year):
super().__init__(make, model, year)
self.battery_size = 70
def describe_battery(self):
print("This car has a " + str(self.battery_size) + "-kWh battery.")
my_tesla = ElectricCar('tesla', 'model s', 2018)
print(my_tesla.get_descriptive_name())
my_tesla.describe_battery()
2018 Tesla Model S
This car has a 70-kWh battery.
重写父类的方法
假设Car类有一个名为fill_gas_tank()的方法,它对全电动汽车来说毫无意义,因此想重写它
class ElectricCar(Car):
def __init__(self, make, model, year):
super().__init__(make, model, year)
self.battery_size = 70
def describe_battery(self):
print("This car has a " + str(self.battery_size) + "-kWh battery.")
def fill_gas_tank():
print("This car doesn't need a gas tank!")
将类实例作为属性
class Battery():
def __init__(self, battery_size=70):
self.battery_size = battery_size
def describe_battery(self):
print("This car has a " + str(self.battery_size) + '-kWh battery.')
def get_range(self):
if self.battery_size == 70:
range = 240
elif self.battery_size == 85:
range = 270
class ElectricCar(Car):
def __init__(self, make, model, year):
super().__init__(make, model, year)
self.battery = Battery()
def describe_battery(self):
print("This car has a " + str(self.battery_size) + "-kWh battery.")
def fill_gas_tank():
print("This car doesn't need a gas tank!")
my_tesla = ElectricCar('tesla', 'model s', 2016)
print(my_tesla.get_descriptive_name())
my_tesla.battery.describe_battery()
my_tesla.battery.get_range()
2016 Tesla Model S
This car has a 70-kWh battery.
网友评论