前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python入门-4:类与对象

python入门-4:类与对象

作者头像
王诗翔呀
发布2020-11-20 10:26:50
3840
发布2020-11-20 10:26:50
举报
文章被收录于专栏:优雅R

类和对象

面对对象编程是最有效的软件编写方法之一,在面对对象编程中,编写表示现实世界中的事物和情景的类,并基于这些类来创建对象。对象在python中可以说是无处不在,对象就是用代码模拟真实世界。对象=属性+方法,一个对象的特征称为“属性”,一个对象的行为称为“方法”。

下面学习如何创建类:

类里面创建函数不一样的地方就是要加个self,python 中的类可以生成无数个对象,当一个对象的方法被调用的时候,对象就会将自身的引用作为第一个参数传给该方法。

代码语言:javascript
复制
>>> class BALL:
...     def setname(self,name):
...         self.name=name
...     def kick(self):
...         print('my name is %s, oh,who kick me?'%self.name)
...
>>> a=BALL()
>>> a.setname('tom')
>>> a.kick()
my name is tom, oh,who kick me?
python 的魔法方块

int()是一个特殊的方法,每当根据类创建新对象的时候,python都会自动运行它,每个与类相关联的方法调用都会自动传递实参self,让实例能够访问类中的属性和方法。

代码语言:javascript
复制
>>> class Dog():
...     def __init__(self,name,age):
...         self.name=name
...         self.age=age
...     def sit(self):
...         print(self.name.title()+' is now sitting')
...     def grow(self):
...         print(self.name.title()+' is '+ str(self.age) +' years old')
...
>>> a=Dog('Tom',6) ####传入参数name,age
>>> a.sit() ###直接调用传入的参数
Tom is now sitting
>>> a.grow()
Tom is 6 years old
使用类
定义一个car类:
代码语言:javascript
复制
>>> class Car:
...     def __init__(self,make,model,year):
...         self.make=make
...         self.model=model
...         self.year=year
...     def get_descriptive(self):
...         print(self.year+self.model+self.make)
...
>>> mycar=Car('China','ak','2018')
>>> mycar.get_descriptive()
2018akChina
给属性指定默认值
代码语言:javascript
复制
class Car:
    def __init__(self,make,model,year):
        self.make=make
        self.model=model
        self.year=year
        self.odo=0
    def get_descriptive(self):
        print(self.year+ self.model+ self.make)
    def odometr(self):
        print("this car has "+ str(self.odo) + " miles on it")
>>> mycar=Car('China','ak','2020')      
>>> mycar.odometr()
this car has 0 miles on it ###参数中默认为零,所以结果为零
修改属性的值
直接修改属性的值
代码语言:javascript
复制
>>> mycar= Car('china','ak','2010')
>>> mycar.odo=23 ### 直接修改,让python在实例中找到属性odo直接修改为23
>>> mycar.odometr()
this car has 23 miles on it
通过方法修改属性的值
代码语言:javascript
复制
>>> class Car:
...     def __init__(self,make,model,year):
...         self.odo=0
...         print(self.year+ self.model+ self.make)
...         print("this car has "+ str(self.odo) + " miles on it")
...     def updataodo(self,mileage): ####在里面重新一个对象,让输入的参数为原来默认的值
...         self.odo=mileage
>>> mycar=Car('china','ak','2020')
>>> mycar.updataodo(56)
>>> mycar.odometr()
this car has 56 miles on it
继承

一个类继承另一个类时,它将自动获得另一个类的所有属性和方法,所有的类称为父类,而新类称为子类 简单的例子

代码语言:javascript
复制
>>> class Parent():
...     def hello(self):
...         print("调用父类的方法")
...
>>> class son(Parent):
...     pass
...
>>> a=son()
>>> a.hello()
调用父类的方法

复杂的例子

代码语言:javascript
复制
>>>class electric(Car):
    pass

>>>class moto(Car):
    def __init__(self,shape):
        self.shape=shape
    def getshape():
        print('moto is '+ self.shape)
>>> mycar=electric('china','ak','2010')
>>> mycar.get_descriptive()
2010akchina
>>> class moto(Car):
...     def __init__(self):
...         pass
...
>>> mycar=moto('china','ak','2010')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: __init__() takes 1 positional argument but 4 were given

在这个例子里面我们看到定义moto的时候报错了,因为里面重写了魔法方块_init_,新的_init_没有初始化父类的属性,需要super函数帮助python把父类子类关联起来,改写如下:

代码语言:javascript
复制
>>> class moto(Car):
...     def __init__(self,make,model,year):
...         super().__init__(make,model,year)
...
>>> my=moto('china','ak','2010')
>>> my.get_descriptive()
2010akchina

在子类中增加属性shape,对应了增加了getshape的方法

代码语言:javascript
复制
>>> class moto(Car):
...     def __init__(self,make,model,year,shape):
...         super().__init__(make,model,year)
...         self.shape=shape
...     def getshape(self):
...         print('moto is '+ self.shape)
...
>>> a = moto('cn', 'x', '2020', 'sda')
>>> a.getshape()
moto is sda
导入类

我们上面编写的类保存在一个名为class.py的文件中,文件中可以加上注释信息,这种保存方式就是将文件储存在模块中,用的时候导入模块就好 from class import Car

同样可以在一个模块中储存多个类,可以直接导入整个模块,再加上句点表示法调用里面需要的类 import class class.Car class.moto

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-11-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 优雅R 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 类和对象
    • 定义一个car类:
      • 给属性指定默认值
        • 修改属性的值
          • 继承
            • 导入类
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档