(python的面向对象内容基本和C一样,一个东西,不同语言。要熟悉类,对象,属性(静态),行为(动态)等用语及其概念。)
让我复习一哈:
面向对象程序设计三大基本特征:封装(你用我却无从了解我)、继承(我是你爹)、多态(有共性更有个性)
当时学这个的时候,我们老师说可以类比人类社会,我当时就想,那很多人类社会的现象和问题可以在计算机中找到答案咯。我后来仔细一想,事实上,计算机是人造出来的,在设计它的过程中,自然地联想到了人类社会的情形,并加以运用。计算机与人类社会,是彼此的镜子。
1.定义类
class Students: #别忘了冒号 '''学生类''' #信息。创建类的对象时,输入类名和(,将显示这些信息 pass #类体。由于没想好,先写个pass
2.创建类的对象
class Students: #别忘了冒号 '''学生类''' #信息。创建类的对象时,输入类名和(,将显示这些信息 pass #类体。由于没想好,先写个pass onestudent=Students() print(onestudent) 输出结果 <__main__.Students object at 0x0000026FE93AF910> Process finished with exit code 0
onestudent是类Students的对象
3._init_()方法 (联想C中的构造函数)
实例化一个对象时,Python会自动执行_init_()方法,该方法必须至少包含一个参数,第一个参数是固定的,通常命名为self,self参数是个指向对象本身的引用,用于访问类中的属性和方法。def _init_(self):
class Students: #别忘了冒号 '''学生类''' #信息。创建类的对象时,输入类名和(,将显示这些信息 def _init_(self): print("I am a student!") onestudent=Students() onestudent._init_() 输出结果 I am a student! Process finished with exit code 0
在pycharm上运行时发现的事
def后面加个空格再写_init_(self)
对象不要写self,类当中要写
多个参数的试 class Students: #别忘了冒号 '''学生类''' #信息。创建类的对象时,输入类名和(,将显示这些信息 def _init_(self,intro): print("I am a student!") print(intro) intro_1="tall" intro_2="short" onestudent=Students() onestudent._init_(intro_1) anostudent=Students() anostudent._init_(intro_2) 输出结果 I am a student! tall I am a student! short Process finished with exit code 0
使用函数的时候代入参数即可,pycharm貌似不允许我在实例化对象时把参数写进去,就是不能这样写——onestudent=Students(self,intro_1)。
这和书上写的不同,害我摸索半天,不知道其它环境里是什么情况。
4.创建其它方法
hh一直习惯把它叫做函数,很少叫方法。
class Students: #别忘了冒号 '''学生类''' #信息。创建类的对象时,输入类名和(,将显示这些信息 def _init_(self,intro): print("I am a student!") print(intro) def greet(self,intro): print("Hello,I am "+intro+".") intro_1="tall" intro_2="short" onestudent=Students() onestudent.greet(intro_1) anostudent=Students() anostudent.greet(intro_2) 输出结果 Hello,I am tall. Hello,I am short. Process finished with exit code 0
5.属性(数据成员)
有两种属性,一种是类属性,一种是实例(成员)属性
①类属性
类属性可以通过 类名称 或 实例名 访问 class Students: #别忘了冒号 '''学生类''' #信息。创建类的对象时,输入类名和(,将显示这些信息 num=0 def _init_(self,intro): Students.num+=1 print("I am a student!My number is "+str(Students.num)) intro_1="tall" intro_2="short" onestudent=Students() onestudent._init_(intro_1) anostudent=Students() anostudent._init_(intro_2) 输出结果 I am a student!My number is 1 I am a student!My number is 2 Process finished with exit code 0
可动态改变类属性,且会影响所有对象。
可动态添加类属性
class Students: #别忘了冒号 '''学生类''' #信息。创建类的对象时,输入类名和(,将显示这些信息 num=0 def _init_(self,intro): Students.num+=1 print("I am a student!My number is "+str(Students.num)) intro_1="tall" onestudent=Students() onestudent._init_(intro_1) Students.farewell="拜拜" print(onestudent.farewell) 输出结果 I am a student!My number is 1 拜拜 Process finished with exit code 0
②实例(对象)属性
睡觉了,明儿见。
我来了。
该属性只作用于特定实例(对象)。这样就能让每个实例(对象)有所不同了。
例子
class Students: #别忘了冒号 '''学生类''' #信息。创建类的对象时,输入类名和(,将显示这些信息 def _init_(self): self.num print("I am a student!My number is "+str(self.num)) onestudent=Students() anostudent=Students() onestudent.num=1 anostudent.num=2 onestudent._init_() anostudent._init_() print(onestudent.num) 输出结果: I am a student!My number is 1 I am a student!My number is 2 1 Process finished with exit code 0
然后我想给num初始化,出现了如下情景
class Students: #别忘了冒号 '''学生类''' #信息。创建类的对象时,输入类名和(,将显示这些信息 def _init_(self): self.num=0 print("I am a student!My number is "+str(self.num)) onestudent=Students() anostudent=Students() onestudent.num=1 anostudent.num=2 onestudent._init_() anostudent._init_() print(onestudent.num) 输出结果 I am a student!My number is 0 I am a student!My number is 0 0 Process finished with exit code 0
摸索之后发现,在_init_()体外写的话就可以
class Students: #别忘了冒号 '''学生类''' #信息。创建类的对象时,输入类名和(,将显示这些信息 def _init_(self): print("I am a student!My number is ") num=0 onestudent=Students() anostudent=Students() onestudent.num=1 anostudent.num=2 onestudent._init_() anostudent._init_() print(onestudent.num) 输出结果 I am a student!My number is I am a student!My number is 1 Process finished with exit code 0
6.访问限制
保护类型:(名字前加单下划线)_name
私有类型:(名字前加双下划线)__height
class Students: #别忘了冒号 '''学生类''' #信息。创建类的对象时,输入类名和(,将显示这些信息 def _init_(self): print("I am a student!My number is ") __num=0 onestudent=Students() anostudent=Students() onestudent.__num=1 anostudent.__num=2 onestudent._init_() anostudent._init_() print(onestudent.__num) 输出结果 I am a student!My number is I am a student!My number is 1 Process finished with exit code 0
emm为啥不报错,因为编译器太包容了?
基本完结,撒花。
发现有些地方和书上不一样,看来要在电脑上自己写,不能只看书。