#一、类、对象定义及使用 #定义类语法:class 类名(父类):代码块注意:()可有可无 #class Student: #class Student(): #创建对象(实例)语法:对象名=类名() 注意:Java语言在实例化对象是,采用new关键字,而Python语言不需要。 #student=Student() #isinstance()语法:isinstance()是检测一个对象是否是一个类的实例,语法格式:isinstance(对象,类),结果返回True和False # class Student: # print(123) # student=Student() # print(isinstance(student,Student)) #True #二、属性和方法 #1.属性 # 属性:分为类属性和对象属性 # 属性修饰符:私有属性、公共属性 #(1)类属性 # class Student: # name='张三' #(2)对象属性 # class Student: # name='张三' # student=Student() # student.age=18 # print(student.name) #张三 # print(student.age) #18 #拓展:类属性和对象属性的区别? # 类属性直接通过类名就可以调用,比如:Student.name # 对象属性必须通过对象名调用,比如:studentn.name #(3)公共属性 # 没有任何修饰符,该类型的属性可以被任意一个对象所调用 #name="张三" #print(name) #(4)私有属性 # 私有属性,不能通过对象调用,也不能通过类名调用,只能在本类中调用, # 类似Java语言中的private,如果想要在外部调用,则需提供get和set方法,私有属性通过双下划线修饰__ # __name='李四' # print(__name) #李四 #2.方法 #方法分类:对象方法、类方法、静态方法 #(1)对象方法 # 定义在类中的函数被称为方法,所有的实例都可以访问 # 注意:对象方法,必须默认传递一个参数self,类似java中的this关键字 # 调用:只能通过对象调用 #定义对象方法 # class Student: # def study(self): # print("我还在学习") # #调用 # student=Student() # student.study() #我还在学习 # (2)类方法 # 被@classmethod修饰的方法,被称为类方法 # 参数:cls # 调用:可以通过类调用 #定义类方法 # class Student: # @classmethod # def sleep(cls): # print("睡觉") # #调用 # Student.sleep() #睡觉 #(3)静态方法 # 被@staticmethod修饰的方法,被称为静态方法 # 参数:无参数 # 调用:可以通过类和对象调用 #定义静态方法 # class Student: # @staticmethod # def play(): # print("play basketball") # #调用 # #类名调用 # Student.play() #play basketball # #对象调用 # student=Student() # student.play() #play basketball #三、构造方法 # 构造方法是以双下划线__开头,双下划线__结尾,方法名叫init,构造方法不需要自己调用, # 在实体化对象时调用,和Java中的构造方法一样,语法格式:def __init__(self,参数):代码块 # class Student: # name='sss' # __age=18 # def __init__(self,name,age): # print(456) # self.name=name # self.__age=age # student=Student('张三','19') # print(student.name) #四、封装 # 封装,是给类中的属性提供get、set方法,语法格式: # def set方法(self):代码块 # def get方法(self):代码块 # class Student: # __name='sss' # def setName(self,name): # self.name=name # def getName(self): # return self.name # student=Student() # student.setName('张三') # print(student.getName()) #张三 #get、set装饰器 # get方法装饰器:@property # set方法装饰器:@属性名.setter # 调用:直接通过对象.属性名即可 # 注意:get方法修饰器必须写到set方法修饰器前面 # class Student: # __name='张三' # print(__name) #张三 # @property # def name(self): # return self.__name # @name.setter # def name(self,name): # self.__name=name # student=Student() # student.name='李四' # print(student.name) #李四 # 五、继承 # 继承语法class 子类(父类1,父类2):通过语法格式可以看出Python语言支持多继承,Java语言只支持单继承 class Student: name='sss' __age=18 def __init__(self,name,age): print(name) self.name=name self.__age=age def study(self): print("Student我还在学习") class Person: def study(self): print("Person我还在学习") class Boy(Student): def sleep(self): print("睡觉") # def study(self): # print("Boy我还在学习") #issubclass() # issubclass()方法作用: # 检测一个类是否是另外一个类的子类 # 语法:issubclass(子类,父类) print(issubclass(Boy,Student)) #True print(issubclass(Boy,Person)) #False # 多继承 # 查看一个类的继承关系使用: # 类名.__bases__属性 # 多继承特点:一层一层获取,先找自己的类中,再从继承关系中找 print(Boy.__bases__) #(<class '__main__.Student'>,) boy=Boy('何洋',19) #何洋 boy.study() #Student我还在学习 boy.sleep() #睡觉 # 六、多态 class Student: __name='aaa' print("这是Student") def __init__(self,name): self.__name=name @property def name(self): return self.__name @name.setter def name(self,name): self.__name=name class Boy: __name='aaa' print("这是Boy") def __init__(self,name): self.__name=name @property def name(self): return self.__name @name.setter def name(self,name): self.__name=name class Girl: print("这是Girl") def eat(obj): print("%s正在吃饭"%obj.name) student=Student('李四') boy=Boy('小男孩') girl=Girl() eat(student) #李四正在吃饭 eat(boy) #小男孩正在吃饭 eat(girl) #报错
今天学了python感觉收获颇多。