Python廖雪峯教程學習筆記:Day10

前言

養成一個好的習慣只需要堅持21天,Day10

獲取對象信息

判斷對象類型,可以使用type()函數

type(123)
# <class 'int'>
type('apple')
# <class 'str'>
type(None)
# <type(None) 'NoneType'>

如果一個變量指向函數或者類,也可以用type()函數來判斷:

type(abs)
# <class 'builtin_function_or_method'>

types模塊中有很多定義的常量:

import types
def fn():
	pass
type(fn)==types.FunctionType
# True
type(lambda x:x)==types.LambdaType
# True

使用isinstance()
如果要判斷class的類型,可以使用isinstance()函數。day9中在學習繼承和多態的時候其中的繼承關係是:

object -> Animal -> Dog

首先創建不同類的對象:

a = Animal()
d = Dog()
print(isinstance(d,Dog))
print(isinstance(d,Animal))
# True
# True

還可以直接判斷變量類型:

isinstance('abc',str)
# True

使用dir()
如果要獲得一個對象的所有屬性和方法,可以使用dir()函數,它返回一個包含字符串的list,比如,獲得一個str對象的所有屬性和方法:

dir('abc')
# ['__add__', '__class__',..., '__subclasshook__', 'capitalize', 'casefold',..., 'zfill']

通過dir()得到的對象屬性,可以直接去調用,例如對象中包含有__len__()方法:

print(len('abc'))
# 3
print('abc'.__len__())
# 3

對象的屬性和方法可以判斷獲知,配合getattr()setattr()以及hasattr(),我們可以直接操作一個對象的狀態:

class MyObject(object):
	def __init__(self):
		self.x = 9
	def power(self):
		return self.x * self.x
obj = MyObject

接下來使用getattr()setattr()以及hasattr()來測試對象的屬性:

hasattr(obj,'x')
# True
setattr(obj,'y',19)
hasattr(obj,'y')
# True
getattr(obj,'y')
# 19

實例屬性和類屬性

給實例綁定屬性的方法是通過實例變量,或者通過self變量:

class Student(objet):
	def__init__(self,name):
		self.name = name  #通過self變量綁定name屬性
s = Student('Bob')
s.score = 90 # 通過實例變量綁定score屬性

如果想要給類綁定一個屬性,就可以直接在class類中定義屬性:

class Student(object):
    name = 'Student'

接下來,測試類的屬性:

s = Student() # 創建實例s
print(s.name) # 打印name屬性,實例s沒有name屬性,就打印class類的name屬性
# Student
print(Sudent.name) # 打印類的name屬性
# Student
s.name = 'Tom' #  給實例定義name屬性
print(Srudent.name) # 類的name屬性並未改變
# Student 

練習
爲了統計學生人數,可以給Student類增加一個類屬性,每創建一個實例,該屬性自動增加:

class Student(object):
    count = 0
 
    def __init__(self, name):
        self.name = name
        Student.count+=1
 
    def get_count(object):
        return object.count

# 測試:
if Student.count != 0:
    print('測試失敗!')
else:
    bart = Student('Bart')
    if Student.count != 1:
        print('測試失敗!')
    else:
        lisa = Student('Bart')
        if Student.count != 2:
            print('測試失敗!')
        else:
            print('Students:', Student.count)
            print('測試通過!')
# Students: 2
# 測試通過!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章