美文网首页
Python 类

Python 类

作者: 康乐芳华 | 来源:发表于2017-11-22 23:34 被阅读0次

单纯的类

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

相关文章

网友评论

      本文标题:Python 类

      本文链接:https://www.haomeiwen.com/subject/bzlavxtx.html