日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

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

發布時間:2024/9/27 python 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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、如何比較一個變量的類型
查看是否是某種類型:

type(a)type(person)#比較一個類型是否是intr = 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("終于不是人了")

總結

以上是生活随笔為你收集整理的Python面向对象,类,继承,多态及鸭子类型,获取类的类型,方法和属性(类似java的反射)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。