一、什么是对象和类
1. 从现实世界说起
什么是对象
现实世界中,任何一个可见,可触及的物体都可以成为对象。
比如说一辆汽车,一个人,都可以称为对象。
那每个对象都是有属性和功能(或者说技能)的。
什么是类
听人们常说,物以类聚,人以群分。
从字里行间不难看出,类就是具体很多对象共有属性和共有功能的抽象体。
这个抽象体,只是一个称谓,代表了具有相同属性和功能的某些对象。
比如,具体的一辆汽车是一个对象,红色汽车就是这些具有红色车身的汽车的统称,红色汽车就是一个类了。
相关的例子还有很多,比如 蔬菜是一个类,一个具体的茄子是属于蔬菜这个类的。
现实世界中是先有对象后有类的。
二、Python 中一切皆对象
你可能听说过,在 Python 中一切皆对象。
在python中,一切皆对象。数字、字符串、元组、列表、字典、函数、方法、类、模块等等都是对象,包括你的代码。
之前也提到过,Python 中的对象都有三个特性
- id
标识了一个对象的唯一性,使用内置函数 id() 可以获取到 - 类型
表明了这个对象是属于哪个类, 使用内置函数 type() 可以获取到 - 值
就是这个对象的本身,可以使用内置函数 print() 看到,这个看到的是 Python 让你看到的一个对象特有的表现方式而已。
三、创建类
类名的第一个字母需要大写,这是规范。
class Foo:
pass
四、实例化对象
定义类
class Car():
color = 'red' # 属性
def travel(self): # 方法
pass
实例化一个对象
Car() # 没有起名字
mycar = Car() # 起了个名字 mycar
五、属性
类的属性分为类的数据属性(key=value)和函数属性
类的实例只有数据属性(key=value)
class Person():
city = "BeiJing" # 类的数据属性
def __init__(self, name,age):
self.name = name # 实例对象的数据属性
self.age = age
def run(self): # 类的函数属性
pass
类属性可以被类和对象调用, 是所有对象共享的
实例属性只能由对象调用
六、对象的初始化方法 __init__()
对象的初始化方法是用于实例化对象时使用的。
方法的名称是固定的 __init__()
当进行实例化的时候,此方法就会自动被调用。
class AP():
area = '蓝方' # 类的属性 -- 类的数据属性
def __init__(self, name, hp=690, atc=78): # 类的函数属性
self.name = name # 对象的属性
self.hp = hp
self.atc = atc
zj = AP("甄姬")
xq = AP("小乔")
七、方法
凡是在类里定义的函数都都称为方法
方法本质上是函数,也是类的函数属性
class AP:
# 实例的绑定方法 类的函数属性
def __init__(self, name, hp=690, atc=78):
self.name = name # 对象的属性
self.hp = hp
self.atc = atc
def run(self):
print(self, id(self))
print("{} is running".format(self.name))
@classmethod
def class_method(cls):
"""
类方法, cls 就是类 -》 调用此方法的类
:return:
"""
pass
@staticmethod
def statict_method():
"""
本质上就是一个普通函数而已,只不过是在类里面定义了
:return:
"""
pass
zj = AP("甄姬")
xq = AP("小乔", hp=780)
# print(id(zj))
# zj.run()
print(id(xq))
xq.run()
方法可以被这个类的每个实例对象调用,当一个实例对象调用此方法的时候, self 会被自动传值,传入的值就是目前调用此方法的 实例对象。
类方法一般是用 类名.类方法 的方式调用,在被调用时, cls 也会被自动传值,被传入的值就是调用此方法的类; 当然类方法也可以被实例调用,此时 cls 仍然是此实例的类。
静态方法就是在类里定义的普通函数而已,对于参数没有任何要求。可以被类和实例调用。
相对于静态方法,类方法和实例的绑定方法,他们的 第一个参数都是必须要有的。
八、魔方方法 __str__()
实现定义类的实例的表现形式
当我们定义一个类的时候,默认打印出它实例时是不易读的,某些情况下我需要让这个类的实例的表现形式更易读。就可以使用__str__()
这个方法。
使用前
class Person:
def __init__(self, name):
self.name = name
p = Person('shark')
print(p)
# <__main__.Person object at 0x10ac290f0>
使用后
class Person:
def __init__(self, name):
self.name = name
def __str__(self):
return "{}".format(self.name)
p = Person('shark')
print(p)
# shark
其实,
__str__()
方法本身在我们定义类的时候就已经存在了,是 Python 内置的。我们在这里只是有把这个方法重写了。
这个方法在使用的时候有返回值
,且返回值必须是字符串
类型
网友评论