类和对象

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)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。