单纯的类
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() + ' is now rolling over...')
dog = Dog('Alice', 5) // 没有 new
dog.sit()
dog.roll_over()
Alice is now sitting...
Alice is now rolling over...
继承
class Car ():
def __init__(self, make, model, year):
self.make = make
self.model = model
self.year = year
self.odometer_reading = 0
def get_describe_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 up_date_odometer(self, mileage):
if mileage >= self.odometer_reading:
self.odometer_reading = mileage
else:
print('you can not roll back an odometer')
def increment_odometer(self, miles):
self.odometer_reading += miles
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_describe_name())
2018 Tesla Model S
super()
函数帮助Python将父类跟子类联系起来, 父类也称为超类superclass
在 Python 2.7 版本里面的继承也少许的不同
super(ElectricCar, self).__init__(make, model, year)
数据隐匿
class Spam:
__egg = 7
def print_egg(self):
print(self.__egg)
s = Spam()
s.print_egg() // 7
print(s._Spam__egg) / 7
print(s.__egg) // AttributeError: 'Spam' object has no attribute '__egg'
假设 有 class b
, b
有方法 a
, 从外部访问 a
可以使用 _b__a
类方法
我们迄今为止见到的方法称之为类的实例方法, 由 self 来调用
类方法不同 由 class 调用 并且必须得有 @classmethod 声明 举个例子
class Rectangle:
def __init__(self, width, height):
self.width = width
self.height = height
def calculate_area(self):
return self.width * self.height
@classmethod
def new_square(cls, side_length):
return cls(side_length, side_length)
square = Rectangle.new_square(5)
print(square.calculate_area()) // 25
网友评论