类
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()
访问权限控制
把属性变成私有加__
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 不能访问了
需要访问可以增加get set 方法,类似于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
# 还是可以这么访问 不建议这么访问,视为私有的就好
print(s._Student__name)
继承和多态
获取对象信息
type()
isinstance()
dir() 获取对象所有的属性和方法
print(dir(s))
# 还是可以访问 不建议这么访问,视为私有的就好
print(s._Student__name)
print(dir(s))
# 判断是否有属性name
print(hasattr(s, 'name')) # False
# 如果能确认对象信息的话,就不需要获取了
print(hasattr(s, '__name')) # False
print(hasattr(s, '_Student__name')) # True
# 设置属性
setattr(s, 'x', 20)
print(hasattr(s, 'x')) # True
# 获取属性
print(getattr(s, 'x')) # 20
# getattr() 可以传入一个默认值,如果属性不存在,就返回默认值
print(getattr(s, 'y', 404)) # 404
# 也可以用于获取对象的方法
print(hasattr(s, 'set_score'))
# 也可以用于获取对象的方法
print(hasattr(s, 'set_score'))
类属性
类属性属于类,可以通过类名和实例名来访问
class Student(object):
# 类属性
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)