Python面向对象,类,继承,多态及鸭子类型,获取类的类型,方法和属性(类似java的反射)

xiaoxiao2021-02-28  10

1、创建类的代码:

#在Java中,所有的最终父类都是Object #在python中也是,一个类没有直接的父类就写入object class Animal(object): #在python中init方法相当于构造器 #参数列表中,第一个位置是第一个默认的叫做self.也就是实例本身,相当于java的this def __init__(self,name,age,sex): self.name = name self.age = age self.sex = sex def running(self): print("我是" + self.name + "我在跑....") #主函数如此定义 if __name__ == '__main__': #创建实例 animal = Animal("旺财",3,"公") animal.running()

运行的结果是: 我是旺财我在跑….

2、继承

#在Java中,所有的最终父类都是Object #在python中也是,一个类没有直接的父类就写入object class Animal(object): #在python中init方法相当于构造器 #参数列表中,第一个位置是第一个默认的叫做self.也就是实例本身,相当于java的this def __init__(self,name,age,sex): self.name = name self.age = age self.sex = sex def running(self): print("我是" + self.name + "我在跑....") #继承一个类时,将类名放在括号中 class Dog(Animal): pass #主函数如此定义 if __name__ == '__main__': #创建实例 animal = Dog("旺财",3,"公") animal.running()

3、多态

多态1:在python中,多态是伪多态,方法在定义中需要一个父类的参数,而实际传入是可以传入一个子类。

比如说明(Java工程师) 可以是:(Java Web工程师) (java游戏开发工程师)

后面两者相当于是前者的子类。就是多态的一种现象。

#在Java中,所有的最终父类都是Object #在python中也是,一个类没有直接的父类就写入object class Animal(object): #在python中init方法相当于构造器 #参数列表中,第一个位置是第一个默认的叫做self.也就是实例本身,相当于java的this def __init__(self,name,age,sex): self.name = name self.age = age self.sex = sex def running(self): print("我是" + self.name + "我在跑....") #继承一个类时,将类名放在括号中 class Dog(Animal): pass class Person(object): #打印一个方法 def printAnimal(self,animal): #调用方法 animal.running() #主函数如此定义 if __name__ == '__main__': #创建实例 dog = Dog("旺财",3,"公") dog.running() person = Person() person.printAnimal(dog)

运行结果:

上面的的Person部分就是就是多态的一种表现。

多态2:多态的鸭子类型 上面person.printAnimal(dog),传入的dog没有被严格检查。只要在传入的变量中同样含有一个running()的方法。这样话,就可以被调用执行。

具体说明: 方法需要一个animal,然后在方法调用animal的某个方法。 如果用户传入的对象不是animal的子类,但是也有对应的方法也行。

鸭子类型的测试:

#在Java中,所有的最终父类都是Object #在python中也是,一个类没有直接的父类就写入object class Animal(object): #在python中init方法相当于构造器 #参数列表中,第一个位置是第一个默认的叫做self.也就是实例本身,相当于java的this def __init__(self,name,age,sex): self.name = name self.age = age self.sex = sex def running(self): print("我是" + self.name + "我在跑....") #继承一个类时,将类名放在括号中 class Dog(Animal): pass class Person(object): #打印一个方法 def printAnimal(self,animal): #调用方法 animal.running() class A: def running(self): print("我是a......") #主函数如此定义 if __name__ == '__main__': #创建实例 dog = Dog("旺财",3,"公") dog.running() person = Person() person.printAnimal(dog) #鸭子类型测试 a = A() a.running() person.printAnimal(a)

运行结果:

4、获取类的信息

1、如何获取一个变量的类型 Type() 通过type,可以获得是整型,是方法,还是类

通过type,可以看到是方法的类型:

2、如何比较一个变量的类型 查看是否是某种类型:

type(a) type(person) #比较一个类型是否是int r = isinstance(a,int) print(r) r = isinstance(a,str) print(r)

3、如何查看一个类有多少方法 使用dir(参数)方法

4、如果查看一个类有多少属性

#主函数如此定义 if __name__ == '__main__': animal = Animal("a","2","sex") #通过getattr方法拿animal对象中对应的age的属性值 r = getattr(animal,"age","默认值") print(r)

再如:

sex = getattr(animal,"sex","Ren") if sex == "Ren": setattr(animal,"sex","animal") if hasattr(animal,"sex"): if getattr(animal,"sex") == "animal": print("终于不是人了")
转载请注明原文地址: https://www.6miu.com/read-200207.html

最新回复(0)