py学习之路10---类与对象

什么是类与对象

1.类

目前我们都是基于函数和代码块进行编程的,这被称作面向过程的编程。在小型程序中,我们可以使用过程编程,但在大型程序中,我们就要使用面向对象编程。类就是面向对象编程中的重点,他是一种把数据和功能结合起来的类型,就如同平时使用的数值型(int),浮点型(float)一样,我们可以创建该类型的变量,或者叫对象。

2.对象

其实在python中任何一条数据都是对象。对象由‘标识’,‘类型’,‘值’组成。

已经了解的对象

平时我们创建变量的行为也可以被称作创建了一个对象。

>>> myString = "My String"

字符串对象还拥有方法,方法与函数相同,我们可以把方法理解成某个类的对象的专有函数,通过’对象名’.’方法名’()来使用它。

>>> myString.lower()
'my string'

使用dir函数可以列举出一个对象的所有属性和方法:

>>> dir(myString)
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']

这里我们看到了很多以下划线开头的方法,在py中有个约定,这些方法是私有的,理应是不可见的,我们不应该直接去使用它们,但py把选择权交给了我们,使用可以查看这些属性用以学习。

>>> string.__len__()
9
>>> len(string)
9

比如函数len()很有可能就是通过访问方法_len_()来了解字符串长度的。

使用类

定义一个类

通过class关键字来声明一个类

>>> class Car:
    """this is car"""

当然,现在这个类没有任何方法。与函数相同,紧跟在声明后没有名称的字符串就是类的说明。

由类创建对象

>>> car = Car()

Car作为一个空的类,几乎无法进行任何操作,但你可以把它当成一个特殊的字典来处理。

>>> car.door = {}
>>> car.door["left_front"] = {"open"}

方法

在类内定义的函数就是其专属的方法,我们为Car类写几个方法:

>>> class Car:
    """this is car"""
    def __init__(self):
        self.door = {}
        self.door["left_front"] = 0
        self.door["right_front"] = 0
        self.door["left_after"] = 0
        self.door["right_after"] = 0
    def openDoor(self,doorName):
        if doorName in self.door:
            self.door[doorName] = 1
        else:
            print("this is not a door ID")
    def doorState(self):
        print(self.door)

在这里我们定义了三个方法,用于初始化的_init_,用来开门的openDoor,用来查阅门状态的doorState

此外

_init_方法

等价于C++的构造函数,在对象被创建时被调用。用于初始化变量

self

类方法与普通函数只有一个特殊区别——类方法必须增加一个额外的形参,而且它必须处于第一个形参的位置,但是在调用类方法时不要为这个额外的形参传值,python会自动代劳。这个特别的变量引用对象本身,按照惯例它被命名为self。等价于C++的this指针。当然你可以为它取别的名字,但用self会让代码更方便阅读。我们通过self来使用类自身的数据。

对象和作用域

之前讲过函数的局部变量,其实质是函数创建了自己的空间,也就是作用域。作用域内有这专属的变量(局部变量),这些变量一旦脱落了作用域就失去了其意义。而每个对象都有其自己的作用域,它的作用域内有它的数据,方法甚至是另一个类。

>>> class Car:
    """this is car"""
    class Tire:
        """this is Tire"""

现在只有car才能使用轮胎(Tire)了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值