類(lèi)
class Student(object):
def __init__(self, name, score):
self.name = name
self.score = score
def print_score(self):
print('%s: %s' % (self.name, self.score))
s = Student('xiaoming', 50)
s.print_score()
訪(fǎng)問(wèn)權(quán)限控制
把屬性變成私有加__
class Student(object):
def __init__(self, name, score):
self.__name = name
self.__score = score
def print_score(self):
print('%s: %s' % (self.__name, self.__score))
s = Student('xiaoming', 50)
s.print_score()
s.__name 不能訪(fǎng)問(wèn)了
需要訪(fǎng)問(wèn)可以增加get set 方法悲柱,類(lèi)似于Java
def get_name(self):
return self.__name
def get_score(self):
return self.__score
def set_name(self, name):
self.__name = name
def set_score(self, score):
self.__score = score
# 還是可以這么訪(fǎng)問(wèn) 不建議這么訪(fǎng)問(wèn)尖殃,視為私有的就好
print(s._Student__name)
繼承和多態(tài)
獲取對(duì)象信息
type()
isinstance()
dir() 獲取對(duì)象所有的屬性和方法
print(dir(s))
# 還是可以訪(fǎng)問(wèn) 不建議這么訪(fǎng)問(wèn)关顷,視為私有的就好
print(s._Student__name)
print(dir(s))
# 判斷是否有屬性name
print(hasattr(s, 'name')) # False
# 如果能確認(rèn)對(duì)象信息的話(huà)鸡岗,就不需要獲取了
print(hasattr(s, '__name')) # False
print(hasattr(s, '_Student__name')) # True
# 設(shè)置屬性
setattr(s, 'x', 20)
print(hasattr(s, 'x')) # True
# 獲取屬性
print(getattr(s, 'x')) # 20
# getattr() 可以傳入一個(gè)默認(rèn)值,如果屬性不存在慢逾,就返回默認(rèn)值
print(getattr(s, 'y', 404)) # 404
# 也可以用于獲取對(duì)象的方法
print(hasattr(s, 'set_score'))
# 也可以用于獲取對(duì)象的方法
print(hasattr(s, 'set_score'))
類(lèi)屬性
類(lèi)屬性屬于類(lèi),可以通過(guò)類(lèi)名和實(shí)例名來(lái)訪(fǎng)問(wèn)
class Student(object):
# 類(lèi)屬性
school = 'middle school'
def __init__(self, name, score):
self.__name = name
self.__score = score
def print_score(self):
print('%s: %s' % (self.__name, self.__score))
print(Student.school)
print(s.school)