python面向对象类的定义
类即类别、种类,是面向对象设计最重要的概念,对象是特征与技能的结合体,而类则是一系列对象相似的特征与技能的结合体
在程序中:务必保证先定义类,后产生对象
这与函数的使用是类似的,先定义函数,后调用函数,类也是一样的,在程序中需要先定义类,后调用类
不一样的是,调用函数会执行函数体代码返回的是函数体执行的结果,而调用类会产生对象,返回的是对象 声明类""" class 类名: "类的文档字符串" 类体 """ #我们创建一个类 class Data: pass class Person: #定义一个人类 role = "person" #人的角色属性都是人 def walk(self): #人都可以走路,也就是有一个走路方法,也叫动态属性 print("person is walking...")在程序中,务必保证:先定义(类),后使用(产生对象) PS: 1. 在程序中特征用变量标识,技能用函数标识 2. 因而类中最常见的无非是:变量和函数的定义 #程序中的类 class Student: school="changan" def learn(self): print("is learning") def eat(self): print("is eating") def sleep(self): print("is sleeping") #注意: 1.类中可以有任意python代码,这些代码在类定义阶段便会执行 2.因而会产生新的名称空间,用来存放类的变量名与函数名,可以通过Student.__dict__查看 3.对于经典类来说我们可以通过该字典操作类名称空间的名字(新式类有限制),但python为我们提供专门的.语法 4.点是访问属性的语法,类中定义的名字,都是类的属性 #程序中类的用法 .:专门用来访问属性,本质操作的就是__dict__ Student.school #等于经典类的操作Student.__dict__["school"] Student.school="changan" #等于经典类的操作Studentt.__dict__["school"]="changan" Student.x=1 #等于经典类的操作Student.__dict__["x"]=1 del Student.x #等于经典类的操作Student.__dict__.pop("x")#程序中的对象 #调用类,或称为实例化,得到对象 s1=Student() s2=Student() s3=Student() #如此,s1、s2、s3都一样了,而这三者除了相似的属性之外还各种不同的属性,这就用到了__init__ #注意:该方法是在对象产生之后才会执行,只用来为对象进行初始化操作,可以有任意代码,但一定不能有返回值 class Student: ...... def __init__(self,name,age,sex): self.name=name self.age=age self.sex=sex ...... s1=Student("小明","男",18) #先调用类产生空对象s1,然后调用Student.__init__(s1,"小明","男",18) s2=Student("小红","女",17) s3=Student("小军","男",18) #程序中对象的用法 #执行__init__,s1.name="小明",很明显也会产生对象的名称空间 s2.__dict__ {"name": "小红", "age": "女", "sex": 17} s2.name #s2.__dict__["name"] s2.name="小红" #s2.__dict__["name"]="小红" s2.course="python" #s2.__dict__["course"]="python" del s2.course #s2.__dict__.pop("course") 在程序中:先定义类,后产生对象 类属性的补充我们定义的类的属性到底存到哪里了? 有两种方式查看 dir(类名):查出的是一个名字列表类名. __dict__:查出的是一个字典,key为属性名,value为属性值 特殊的类属性 类名.__name__# 类的名字(字符串) 类名.__doc__# 类的文档字符串 类名.__base__# 类的第一个父类(在讲继承时会讲) 类名.__bases__# 类所有父类构成的元组(在讲继承时会讲) 类名.__dict__# 类的字典属性 类名.__module__# 类定义所在的模块 类名.__class__# 实例对应的类(仅新式类中) 类有两种作用:属性引用和实例化属性引用(类名.属性)class Person: #定义一个人类 role = "person" #人的角色属性都是人 def walk(self): #人都可以走路,也就是有一个走路方法 print("person is walking...") print(Person.role) #查看人的role属性 print(Person.walk) #引用人的走路方法,注意,这里不是在调用实例化:类名加括号就是实例化,会自动触发__init__函数的运行,可以用它来为每个实例定制自己的特征class Person: #定义一个人类 role = "person" #人的角色属性都是人 def __init__(self,name): self.name = name # 每一个角色都有自己的昵称; def walk(self): #人都可以走路,也就是有一个走路方法 print("person is walking...") xiaoming = Person() print(xiaoming.role) #查看属性直接 对象名.属性名 print(xiaoming.walk()) #调用方法,对象名.方法名()#类型dict就是类dict >>> list #实例化的到3个对象l1,l2,l3 >>> l1=list() >>> l2=list() >>> l3=list() #三个对象都有绑定方法append,是相同的功能,但内存地址不同 >>> l1.append >>> l2.append >>> l3.append #操作绑定方法l1.append(3),就是在往l1添加3,绝对不会将3添加到l2或l3 >>> l1.append(3) >>> l1 [3] >>> l2 [] >>> l3 []对象/实例只有一种作用:属性引用class Person: #定义一个人类 role = "person" #人的角色属性都是人 def __init__(self,name): self.name = name # 每一个角色都有自己的昵称; def walk(self): #人都可以走路,也就是有一个走路方法 print("person is walking...") xiaoming = Person() print(xiaoming.role) #查看属性直接 对象名.属性名 print(xiaoming.walk()) #调用方法,对象名.方法名() class 类名: def __init__(self,参数1,参数2): self.对象的属性1 = 参数1 self.对象的属性2 = 参数2 def 方法名(self): pass def 方法名2(self): pass 对象名 = 类名(1,2) #对象就是实例,代表一个具体的东西 #类名() : 类名+括号就是实例化一个类,相当于调用了__init__方法 #括号里传参数,参数不需要传self,其他与init中的形参一一对应 #结果返回一个对象 对象名.对象的属性1 #查看对象的属性,直接用 对象名.属性名 即可 对象名.方法名() #调用类中的方法,直接用 对象名.方法名() 即可