类的概念,定义,使用demo:
#coding:utf-8 """ 类的概念:类是指一类事物,比如说:手机,有属性型号、价格,有功能 打电话,发短信,wifi等等 对象的概念:对象就是类的具体化,比如说:华为p10 类的定义:类名,首字母大写,驼峰命名(每个单词首字母大写),如果类名后不写(),则默认继承自object class [类名][(父类名称,可以0~多个以逗号分隔)]: #属性、函数 """ class Person(): """Person类,类的属性可以动态创建""" def __init__(self,name,age): """初始化方法,初始化属性值,self代表当前对象""" self.name=name self.age=age """双下划线开头属性为私有属性,外部不能访问""" self.__company='c1' #print(self.__company) pass def get_company(self): """访问私有属性方法""" return self.__company def set_company(self,company): """设置私有属性方法,可以做效验判断""" if company!=None and company !='': self.__company=company pass def eat(self): """定义一个类的普通方法""" print("{} eat~".format(self.name)) pass def make_car(self,name,speed): car = Car(name,speed) return car def drive(self,car): car.run() print("{}开着他的小突突【{}】以{}KM/H速度行驶".format(self.name,car.name,car.speed).decode("utf-8")) pass def __test_private(self): """双下划线开头方法为私有方法,外部不能访问""" print("test_private") pass class Car(): def __init__(self,name,speed): self.name=name self.speed=speed pass def run(self): print("{}正在公路上行驶……".format(self.name).decode("utf-8")) """创建对象,构造函数赋值过程 p1->self Json->name 20->age """ p1=Person("Json",20) print(p1.name,p1.age,p1.get_company()) p1.eat() car = p1.make_car("大白",60) p1.drive(car) """16进制打印对象内存地址""" #print(hex(id(p1))) """判断一个对象是否属性某类""" #print(isinstance(p1,Person))
类的继承、方法覆盖、伪多态等demo
#coding:utf-8 """类的继承:子类有父类特性(父类私有属性和方法不会被继承) 方法覆盖:如果子类方法跟父类一样,会把父类方法覆盖掉 如果一个方法在子类不存在,而在多个父类中存在,则调用不确定,由c3算法确定,可调用 子类.__mro__ 查看方法的解释顺序 """ class Person: """Person类,类的属性可以动态创建""" def __init__(self,name,age): """初始化方法,初始化属性值,self代表当前对象""" self.name=name self.age=age pass def eat(self): """定义一个类的普通方法""" print("person {} eat~".format(self.name)) pass class Student(Person,object): def __init__(self,name,age,sn): """初始化方法,初始化属性值,self代表当前对象 调用父类的__init__方法 """ super(Student,self).__init__(name,age)#在python2中,Person需要继承自object,不然会报错 #Person.__init__(self,name,age) self.sn=sn#学号 pass def eat(self): """定义一个类的普通方法""" print("student {} eat ~".format(self.name)) pass def study(self): """定义一个类的普通方法""" print("{} study~".format(self.name)) pass pass class Fish: def eat(self): """定义一个类的普通方法""" print("fish eat ~") """伪多态,因为python数据没有类型,那么也不存在真正的多态的概念 (伪多态也叫鸭子类型,理解:如果一个对象不是鸭子,但有些特征,比如:走路像鸭子,吃饭像鸭子等等,那么就可以把它当成鸭子处理)""" def duck(person): person.eat()#只要有eat()方法的对象,都可以调用成功 pass def main(): p1=Person("jack",22) s1=Student("Jefy",18,"007") print(p1.name,p1.age) p1.eat() print(s1.name,s1.age,s1.sn) s1.eat() s1.study() print(" 查看方法的解释顺序".decode("utf-8")) print(Student.__mro__) print(" 伪多态".decode("utf-8")) p=Person("p1",10) duck(p) f=Fish() duck(f) main()