第8天 | 12天搞定Python,面向对象( 二 )


实例方法只能被实例对象访问 。 而静态方法、类方法既可被类访问 , 也可以被实例对象访问 。
# 类里的各种方法class Employee:# 构造方法def __init__(self, name, address):self.name = nameself.address = address# 实例方法def get_address(self):return self.address# 静态方法@staticmethoddef get_name():return "西门吹水"# 类方法@classmethoddef get_age(cls):return 38# 析构方法def __del__(self):print("释放资源")# 实例化c = Employee("程序员", "今日头条:老陈说编程")# 静态方法print(Employee.get_name())# 实力方法print(c.get_address())# 直接用类名调用print(Employee.get_age())输出方法
西门吹水今日头条:老陈说编程388.6 数据封装数据封装是面向对象编程的一个重要特点 , 它通过限制访问 , 对数据进行保护 。 封装 , 即是在类内部 , 将某些不想被外部访问或调用的部分内容隐藏起来 , 如若外部要调用 , 只能通过公开的接口进行 。 Python语言没有private、protected这些关键字, 它用双下划线__表示私有类型(private)的属性或方法 。 以单下划线_开头的表示的是protected 类型的属性和方法 。
# 定义一个员工类class Employee:# 私有属性__age = 18# 私有属性__address = "广东"# 公有属性phone = 12345678910def __init__(self, name):self.name = name# 公有方法def get_age(self):return self.__age# 公有方法def get_name(self):return self.name# 私有方法def __get_address(self):return self.__addresse = Employee("王二麻子")print(e.phone)print(e.get_name())print(e.get_age())# 私有属性和方法不可调用# print(e.__age())# print(e.__get_address())其实Python并没有真正的私有属性或方法 , 通过对象._类名__私有属性名或对象._类名__私有方法名 , 就可以访问私有属性或私有方法 。
# 定义一个员工类class Employee:# 私有属性__name = "酷哥"# 私有方法def __get_age(self):return 18e = Employee()# 私有属性或方法都可以访问print(e._Employee__name)print(e._Employee__get_age())输出结果
酷哥188.7 None值Python语言中没有NULL值 , 有None值 。 Nono不是空 , 也不是0 。 它也是一种数据类型NoneType 。 判断一个对象是否为None值 , 可通过is进行 。
# None值n = Noneprint(n)print(type(n))if n is None:print("对象不存在")else:print("对象存在")# --not is 为反过来的判断—if n is not None:print("对象存在")else:print("对象不存在")输出结果
None对象不存在对象不存在8.8 继承即一个派生类(derived class)继承基类(base class)的字段和方法 。 继承也允许把一个派生类的对象作为一个基类对象对待 。 例如 , 有这样一个设计:一个Dog类型的对象派生自Animal类 , 这是模拟"是一个(is-a)"关系(例图 , Dog是一个Animal) 。
class ClassName(基类):
# 类定义class People:# 定义基本属性name = ''age = 0# 私有属性 , 体重(公斤)__weight = 0# 定义构造方法def __init__(self, n, a, w):self.name = nself.age = aself.__weight = wdef speak(self):print("%s说:我%d岁 。 " % (self.name, self.age))# 单继承示例class Teacher(People):grade = ''def __init__(self, n, a, w, g):# 调用父类的构函People.__init__(self, n, a, w)self.grade = g# 覆写父类的方法def speak(self):print("%s说: 我%d岁了 , 我在教%d年级" % (self.name, self.age, self.grade))s = Teacher('marry', 30, 65, 6)s.speak()


推荐阅读