Python面向对象,类,继承,多态及鸭子类型,获取类的类型,方法和属性(类似java的反射)
生活随笔
收集整理的這篇文章主要介紹了
Python面向对象,类,继承,多态及鸭子类型,获取类的类型,方法和属性(类似java的反射)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、創建類的代碼:
#在Java中,所有的最終父類都是Object #在python中也是,一個類沒有直接的父類就寫入objectclass Animal(object):#在python中init方法相當于構造器#參數列表中,第一個位置是第一個默認的叫做self.也就是實例本身,相當于java的thisdef __init__(self,name,age,sex):self.name = nameself.age = ageself.sex = sexdef running(self):print("我是" + self.name + "我在跑....")#主函數如此定義 if __name__ == '__main__':#創建實例animal = Animal("旺財",3,"公")animal.running()運行的結果是:
我是旺財我在跑….
2、繼承
#在Java中,所有的最終父類都是Object #在python中也是,一個類沒有直接的父類就寫入objectclass Animal(object):#在python中init方法相當于構造器#參數列表中,第一個位置是第一個默認的叫做self.也就是實例本身,相當于java的thisdef __init__(self,name,age,sex):self.name = nameself.age = ageself.sex = sexdef 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中也是,一個類沒有直接的父類就寫入objectclass Animal(object):#在python中init方法相當于構造器#參數列表中,第一個位置是第一個默認的叫做self.也就是實例本身,相當于java的thisdef __init__(self,name,age,sex):self.name = nameself.age = ageself.sex = sexdef running(self):print("我是" + self.name + "我在跑....")#繼承一個類時,將類名放在括號中 class Dog(Animal):passclass 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中也是,一個類沒有直接的父類就寫入objectclass Animal(object):#在python中init方法相當于構造器#參數列表中,第一個位置是第一個默認的叫做self.也就是實例本身,相當于java的thisdef __init__(self,name,age,sex):self.name = nameself.age = ageself.sex = sexdef running(self):print("我是" + self.name + "我在跑....")#繼承一個類時,將類名放在括號中 class Dog(Animal):passclass 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、如何比較一個變量的類型
查看是否是某種類型:
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("終于不是人了")總結
以上是生活随笔為你收集整理的Python面向对象,类,继承,多态及鸭子类型,获取类的类型,方法和属性(类似java的反射)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 有系统光盘怎么安装系统文件 安装系统文件
- 下一篇: win7 u盘启动 蓝屏怎么办 win7