Python 类

Python 类

坚持意志伟大的事业需要始终不渝的精神。——伏尔泰

类是面向对象写法的基础,都是基于类来创建对象,每个对象都自动具备这种通用行为.依据类来创建对象被称为实例化

创建和使用类

  • 类的起名必须要大写

创建 Dog 类

创建一个 Dog 类,每个类都将存储名字和年龄,赋予每条小狗蹲下(sit())和打滚(roll_over())
的能力


class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def sit(self):
        print(self.name.title()+" 很听话它的年龄是 " + str(self.age)+" 我命令他蹲下 ")

    def roll_over(self):
        print(self.name.title()+"翻滚吧")


mydog = Dog("雷神", 30)

mydog.sit()
mydog.roll_over()

# 结果
# 雷神 很听话它的年龄是 30 我命令他蹲下
# 雷神翻滚吧
  • 方法 __init__()

类中的函数称为方法,__init__这个方法就是构造函数每个类都必须要有,他就是构造函数,其中 self 必须要有,实例化的时候将自动传入实参 self.每个类实例化的时候都必须要执行。

    def __init__(self, name, age):
        self.name = name
        self.age = age
  • 根据类创建实例

我们依据类来创建实例,通过实例.xxx 来访问属性


mydog = Dog("雷神", 30)

mydog.sit()
mydog.roll_over()
  • 依据类 来创建多个实例

class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def sit(self):
        print(self.name.title()+" 很听话它的年龄是 " + str(self.age)+" 我命令他蹲下 ")

    def roll_over(self):
        print(self.name.title()+"翻滚吧")


mydog = Dog("雷神", 30)
mydog.sit()
mydog.roll_over()

mydog2 = Dog("蜘蛛侠", 20)
mydog2.sit()
mydog2.roll_over()
#结果
# 雷神 很听话它的年龄是 30 我命令他蹲下
# 雷神翻滚吧
# 蜘蛛侠 很听话它的年龄是 20 我命令他蹲下
# 蜘蛛侠翻滚吧

使用类和实例

创建一个类


class Car:
    def __init__(self, make, model, year):
        self.make = make
        self.model = model
        self.year = year

    def get_description_name(self):
        long_name = str(self.year) + " " + self.make + " " + self.model
        return long_name.title()


myCar = Car('audi', 'a4', 2016)
print(myCar.get_description_name())
  • 给属性指定默认值

就是在构造函数里面添加值


class Car:
    def __init__(self, make, model, year):
        self.make = make
        self.model = model
        self.year = year
        self.reading = 0

    def get_description_name(self):
        long_name = str(self.year) + " " + self.make + " " + self.model + str(self.reading)
        return long_name.title()


myCar = Car('audi', 'a4', 2016)
print(myCar.get_description_name())

# 结果
2016 Audi A40
  • 修改属性里面的值

class Car:
    def __init__(self, make, model, year):
        self.make = make
        self.model = model
        self.year = year
        self.reading = 0

    def get_description_name(self):
        long_name = str(self.year) + " " + self.make + " " + self.model + str(self.reading)
        return long_name.title()


myCar = Car('audi', 'a4', 2016)
myCar.reading = 23
print(myCar.get_description_name())

# 结果
2016 Audi A423

也可以通过方法来修改



class Car:
    def __init__(self, make, model, year):
        self.make = make
        self.model = model
        self.year = year
        self.reading = 0

    def get_description_name(self):
        long_name = str(self.year) + " " + self.make + \
            " " + self.model + str(self.reading)
        return long_name.title()

    def updatereading(self, number):
        self.reading = number


myCar = Car('audi', 'a4', 2016)
myCar.updatereading(1345)
print(myCar.get_description_name())

# 结果
2016 Audi A41345

继承

继承就是一个类继承另一个类,他将自动获得另一个类的所有属性和方法,原有的称为父类,而新类称为子类。子类继承了其父类的所有属性和方法,同时还定义子的的属性和方法

通过 super().__init__ 和 class xxx(父类)来继承

  • 举例

class Car:
    def __init__(self, make, model, year):
        self.make = make
        self.model = model
        self.year = year
        self.reading = 0

    def get_description_name(self):
        long_name = str(self.year) + " " + self.make + \
            " " + self.model + str(self.reading)
        return long_name.title()

    def updatereading(self, number):
        self.reading = number


class Trunk(Car):
    def __init__(self, make, model, year):
        super().__init__(make, model, year)

    def getname(self):
        print("卡车的名字"+self.make)


myCar = Trunk('audi', 'a4', 2016)
myCar.updatereading(1345)
print(myCar.get_description_name())
myCar.getname()

# 结果
2016 Audi A41345
卡车的名字audi
  • 重写父类的方法

可以将子类的方法和父类的方法写成重名,这样他就会执行子类方法


class Car:
    def __init__(self, make, model, year):
        self.make = make
        self.model = model
        self.year = year
        self.reading = 0

    def get_description_name(self):
        long_name = str(self.year) + " " + self.make + \
            " " + self.model + str(self.reading)
        return long_name.title()

    def updatereading(self, number):
        self.reading = number

    def setname(self):
        print("输出父类的名称")


class Trunk(Car):
    def __init__(self, make, model, year):
        super().__init__(make, model, year)

    def getname(self):
        print("卡车的名字"+self.make)

    def setname(self):
        print("输出子类的名称")


myCar = Trunk('audi', 'a4', 2016)
myCar.updatereading(1345)
print(myCar.get_description_name())
myCar.getname()
myCar.setname()
# 结果
2016 Audi A41345
卡车的名字audi
输出子类的名称
  • 将类拆分 用作属性

class Car:
    def __init__(self, make, model, year):
        self.make = make
        self.model = model
        self.year = year
        self.reading = 0

    def get_description_name(self):
        long_name = str(self.year) + " " + self.make + \
            " " + self.model + str(self.reading)
        return long_name.title()

    def updatereading(self, number):
        self.reading = number

    def setname(self):
        print("输出父类的名称")


class Mo:
    def __init__(self, name):
        self.name = name

    def getname(self):
        return self.name


class Trunk(Car):
    def __init__(self, make, model, year):
        super().__init__(make, model, year)
        self.name = Mo("电池").getname()

    def getname(self):
        print("卡车的名字"+self.make + " " + self.name)

    def setname(self):
        print("输出子类的名称")


myCar = Trunk('audi', 'a4', 2016)
myCar.updatereading(1345)
print(myCar.get_description_name())
myCar.getname()
myCar.setname()

# 结果
2016 Audi A41345
卡车的名字audi 电池
输出子类的名称

使用类中的变量

  • 类中自己定义了变量,我们想要改变 class

class Person():
    name = "YJ"

    def __init__(self):
        self.__class__.name = "Hello"


PersonOne = Person()
print(PersonOne.name)

导入类

  • 导入方式同 导入文件

import son.PyBasic2

mycar = son.PyBasic2.Car('audi', 'a4', 2016)

mycar.setname()
  • 文件中涉及到多个类 也一样

import son.PyBasic2

myCar = son.PyBasic2.Trunk('audi', 'a4', 2016)
myCar.updatereading(1345)
print(myCar.get_description_name())
myCar.getname()
myCar.setname()

myCar2 = son.PyBasic2.Car('audi', 'a4', 2016)
myCar2.setname()

# 结果
2016 Audi A41345
卡车的名字audi 电池
输出子类的名称
输出父类的名称

文章作者: 雾烟云
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 雾烟云 !
  目录