7

Python自学教程12-类和对象怎么用 - 和牛

 1 year ago
source link: https://www.cnblogs.com/heniu/p/16640057.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Python自学教程12-类和对象怎么用

Python是一门现代化的编程语言,也是一门面向对象的编程语言。

现代编程语言几乎都支持面向对象编程,面向对象编程是最有效的软件编写方法之一。你可以用类和对象来表示现实当中的任何的事物和行为。

编写类时,你会定义某一类东西通用的特征和行为。然后通过类创建对象,每个对象都自动具备这个类的特征和行为,还可以赋予每个对象独特的个性。

通过这种方式,你几乎可以把看到的任何事物用代码来表示。 比如我们来描述一下“我开车去上班,车到半路没油了,于是我先加油” 这个普通的场景。

在这个场景中,涉及到的人和物,有 “我”, "车", “油”, 这些人和物就可以通过对象来表示。 我是一个人,属于人这个类, 我的车属于 车这个类, 油就是属于油这个类。

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

出了动作和行为外,还有属性和状态,比如车没油, 加完油以后,有油了。

类和对象的语法稍微有点复杂,要理解确实有一点难度,这也是大多数学习编程的人最后选择了放弃。 但其实只要学会把生活的当中的示例抽象出来,类和对象没有想的那么难。

什么是类

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

类的表示通常采用驼峰式命名。

class Car:
 pass

class Mobile:
 pass

什么是对象

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

  • 隔壁邻居的车

20210605153142.png

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

my_car = Car()
your_car = Car()

类和对象的关系

类就相当于建造房子时的施工图纸(blueprint),是一个模板,是负责创建房子(对象)的,通过类可以得到对象。 就好像玩植物大战僵尸的游戏,上方的卡片就相当于类, 拖动卡片就可以在下方的空地上得到一个对象。

https://gitee.com/looker53/pics/raw/master/img//20210605153158.pnghttps://gitee.com/looker53/pics/raw/master/img//20210605153158.png

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.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)

https://gitee.com/looker53/pics/raw/master/img//20210605153215.pnghttps://gitee.com/looker53/pics/raw/master/img//20210605153215.png

继承充分发挥了面向对象的优势,编写类时,并非总是要从空白开始。如果要编写的类是另一个现成类的特殊版本,可使用继承 。一个类继承另一个类时,将自动获得另一个类的所有属性和方法。原有的类称为父类 ,而新类称为子类 。子类继承了父类的所有属性和方法,同时还可以定义自己的属性和方法。

在写代码时,我们可以利用别人已经写好的类,我们自己定义一个类继承别人写的类,就不需要从零开始写了,大大提高了代码的编写速度。

重写父类方法

如果子类想实现自己的方法,不想用父类现成的,就可以重写父类方法。

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()

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK