python3类和对象的概念
在Python中,类是一种自定义数据类型,用于封装数据和方法。类定义了一个对象的属性和方法,这些属性和方法可以被对象调用。对象是类的实例,具有类定义的属性和方法。
类可以看作是一个模板或蓝图,用于创建对象。对象是类的实例,具有类定义的属性和方法。类定义了对象的属性和方法,而对象则使用这些属性和方法来执行特定的任务。
类是抽象的模板,我们先定义类,然后我们就可以用类这个模板创建出很多对象,比如我们定义一个 Human 类, 然后用 Human 类创建出很多具体的 Human(比如如花,星星,张三)等等。
无论是对于如花,星星还是张三这些具体的人,他们都有一些共同属性(变量)和行为(函数), 我们可以把这些属性和行为定义在他们所属的 Human 类中。
类和对象的定义
Python 使用关键字 class 类名
,或者 class 类名()
来定义一个类。
class Human: pass class Human2(): pass print(type(Human)) # <class 'type'>print(type(Human2)) # <class 'type'>
我们定义好了 Human 类,就可以根据 Human 类创建出对象,创建对象是通过类名和小括号来实现。
class Human(): pass luren_a = Human() # 用 Human 类定义一个具体的对象 luren_a print(type(luren_a)) # <class '__main__.Human'>
我们可以用 Human 类定义多个对象,注意每个对象都是独立的个体。
class Human(): pass luren_a = Human() # 用 Human 类定义一个具体的对象 luren_a luren_b = Human() # 用 Human 类定义一个具体的对象 luren_b print(id(luren_a)) # 139834494871984 print(id(luren_b)) # 139834494206248
我们可以给 Human 类添加变量(属性),该变量叫做类的成员变量,并且可以通过对象访问到成员变量。
class Human(): name = "zhangsan" luren_a = Human() print(luren_a.name) # zhangsan 通过对象访问对象的属性
我们也可以给 Human 类添加函数(方法),该函数叫做类的成员函数, 但要注意成员函数必须至少有一个参数(我们一般给该参数起名为 self,当然也可以是其它名字), 该参数用来接收调用者本身,调用者本身是 Human 类的一个对象。
class Human(): name = "zhangsan" def getname(self): print(id(self)) # self 即是 调用者本身 print(self.name) luren_a = Human() print(id(luren_a)) # 140479241146888 # 通过 luren_a 对象调用成员函数时,Python 解释器会自动把 luren_a 对象本身作为 getname 的第一个实参。 luren_a.getname() # 140479241146888 zhangsan
Python 的类和对象相对其它语言增加的额外特性
Python 允许我们动态的给一个对象绑定属性,比如给我们的 Human 类的某个对象动态绑定一个 age 属性。
class Human(): name = "zhangsan" luren_a = Human() luren_a.age = 18 print(luren_a.age) # 18
Python 还允许我们动态的给一个对象绑定函数,比如给我们的 Human 类的某个对象动态绑定一个 speak 函数。
class Human(): name = "zhangsan" def speak(): print("大家好,我是 zhangsan") luren_a = Human() luren_a.speak = speak luren_a.speak() # 大家好,我是 zhangsan
我们用 Human 类定义好对象后,当给某个对象动态的添加属性和方法时,这些属性和方法并不作用于其它对象。
class Human(): name = "zhangsan" def speak(): print("大家好,我是 zhangsan") luren_a = Human() luren_b = Human() luren_a.age = 18 luren_a.speak = speak print(luren_a.age) # 18 luren_a.speak() # 大家好,我是 zhangsan print(luren_b.age) # 错误 luren_b.speak() # 错误
如果我们想让动态绑定的属性和方法作用于所有对象,可以直接对类进行动态绑定,比如直接对 Human 类进行动态绑定。
class Human(): name = "zhangsan" def speak(self): print("大家好,我是" + self.name) luren_a = Human() luren_b = Human() Human.age = 18 Human.speak = speak print(luren_a.age) # 18 luren_a.speak() # 大家好,我是zhangsan print(luren_b.age) # 18 luren_b.speak() # 大家好,我是zhangsan
本节重要知识点
理解什么是面向对象
弄明白类和对象的区别
知道 Python 的类和对象中增加的额外特性。
评论列表