乐趣区

关于python:Python中的类和对象

古代编程语言简直都反对面向对象编程,面向对象编程是最无效的软件编写办法之一。你能够用类和对象来示意事实当中的任何的事物和行为。

编写类时,你会定义某一类货色通用的特色和行为。而后通过类创建对象,每个对象都主动具备这个类的特色和行为,还能够赋予每个对象独特的共性。

通过这种形式,你简直能够把看到的任何事物用代码来示意。比方咱们来形容一下“我开车去下班,车到半路没油了,于是我先加油”这个一般的场景。

在这个场景中,波及到的人和物,有“我”,“ 车 ”,“油”,这些人和物就能够通过对象来示意。我是一个人,属于人这个类,我的车属于 车这个类,油就是属于油这个类。

还有动作和行为,开车属于我的动作,加油也是属于我的动作。

出了动作和行为外,还有属性和状态,比方车没油,加完油当前,有油了。

类和对象的语法略微有点简单,要了解的确有一点难度,这也是大多数学习编程的人最初抉择了放弃。但其实只有学会把生存的当中的示例形象进去,类和对象没有想的那么难。

什么是类

类是具备独特特色和独特行为的事物的统称。 所谓人以群分,物以类聚。

类的示意 通常采纳驼峰式命名。

class Car:
    pass

class Mobile:
    pass

什么是对象

对象(Object)是一类事物中的一个成员(个体), object 的中文是货色,对象又被称为实例,是一个实实在在存在的货色。

  • 我的车
  • 你的车
  • 隔壁邻居的车

通过类失去对象,这个过程叫实例化,相似函数的调用。

my_car = Car()
your_car = Car()

类和对象的关系

类就相当于建造房子时的施工图纸(blueprint),是一个模板,是负责创立房子(对象)的,通过类能够失去对象。就如同玩动物大战僵尸的游戏,上方的卡片就相当于类,拖动卡片就能够在下方的空地上失去一个对象。

my_car = Car()
car_class = Car
print(type(my_car), type(car_class))

属性

整个类的特色,所有成员都统一,又被称为类变量。

class Car:
    wheel = True
    material = ["塑料", "铁", "铝合金", "橡胶"]

获取类属性

print(Car.wheel)

实例获取类属性

Car().wheel

批改类属性

Car.wheel = False

__init__ 初始化办法

*__init__* 叫初始化办法,代表一个对象产生时的初始化过程。 比方一部手机生产进去后,须要贴 logo,设计型号,壁纸,屏幕亮度。

class Mobile:
    def __init__(self, brand, model, brightness):
        self.brand = brand
        self.model = model
        self.brightness = brightness
        print("Mobile 的品牌:{},型号:{},亮度:{}".format(brand, model, brightness))

这个初始化办法有点非凡,在实例化一个对象时,会主动调用这个办法。办法的第一个参数是 self, 它是一个固定的语法,示意对象自身,其余的 brand, model, brightness 这些参数和一般的函数参数一样,改传值的时候传入理论参数就能够。

self.brand 这样的语法示意定义实例属性,当传入一个具体的参数时,就能赋值成为一个对象的属性。

初始化办法不能有返回值。

self

  • self, 我本人,这个。这个人的名字 self.name
  • self 示意在类外面对象自身。
  • 类里面定义一个变量。
  • self 能够换成其余的变量名,然而是标准,强烈不倡议更换。

    class Mobile:
        def __init__(self, brand):
            self.brand = brand
            print(self)
    
    redmi = Mobile("redmi")
    print(redmi)

### 类变量和实例变量

  • 类变量和类属性一样。
  • 实例变量能够拜访类变量,
  • 类变量不能能拜访实例变量

办法(Method)

实例办法 是用得最多的办法类型,个别默认状况下就是实例办法,通过实例调用。

# 初始化办法

# 实例办法的定义
def drive(self):
    print('{} 正在开车'.format(self.name))

类办法 是通过类调用的办法,能够用来作为备用的构造函数,初始化一个类。

class Dog:

    def __init__(self, fullname):
        self.fullname = fullname

    @classmethod
    def gouzao(cls, name1, name2):
        return cls(name1 + name2)

a = Dog('yuze')
print(a)

b  = Dog.gouzao('yuze','wang')
print(b)

继承

继承充分发挥了面向对象的劣势,编写类时,并非总是要从空白开始。如果要编写的类是另一个现成类的非凡版本,可应用继承。一个类继承另一个类时,将主动取得另一个类的所有属性和办法。原有的类称为父类,而新类称为子类。子类继承了父类的所有属性和办法,同时还能够定义本人的属性和办法。

在写代码时,咱们能够利用他人曾经写好的类,咱们本人定义一个类继承他人写的类,就不须要从零开始写了,大大提高了代码的编写速度。

重写父类办法

如果子类想实现本人的办法,不想用父类现成的,就能够重写父类办法。

class Mobile:
    def __init__(self, brand):
        self.brand = brand
        print(self)
    
    def call():
        print("calling")
        
class Iphone(Mobile):
    def call():
        print("Iphone Calling")

Super

如果你的重写了父类外面的一个办法,而后又想调用父类外面的一些办法,能够用超继承,咱们在单元测试外面会看到这个操作。不必去重写复制代码,轻轻松松能够做到更多继承。(理解会用即可)-super(子类名,self), 依据子类找到父类。

class Animal:
    def run(self):
        print("我是一只动物,我在跑")

class Dog(Animal):
    def run(self):
        super().run()
        print("狗在跑")

Dog().run()

失常的继承:

class Animal:

    def __init__(self, type):
        self.type = type

    def run(self):
        print("{} am running".format(self.type))
        

class Dog(Animal):
    def __init__(self):
        Animal.__init__(self, 'Dog')
        
a_dog = Dog()
a_dog.run()
退出移动版