多态,封装

Posted yfjly

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多态,封装相关的知识,希望对你有一定的参考价值。

# # # # python 面向对象的三大特征之一
# # # # python多态:python中处处都是多态 python是一种弱类型的语言
# # # # java 是强类型语言
# # # # 比如:python中  name = "qq",  java中 int_i = 666  如果之间直接改变类型。python可以直接改变,java则会报错
# # #
# # # # python的鸭子类型:看着像鸭子,他就是鸭子。
# # # # 这些类中都有index 方法,这些类都互称为鸭子,这个不强制。不过尽量使用相同的方法名。可以抽象类统一化使用
# # # class Str:
# # #     def index(self):
# # #         pass
# # #
# # # class List:
# # #     def index(self):
# # #         pass
# # #
# # # class Tuple:
# # #     def index(self):
# # #         pass
# #
# #
# # # 广义的封装:实例化一个对象,给对象封装一些属性
# # # 狭义的封装: 私有制
# # # 私有成员: 私有静态字段:私有方法,私有对象属性
# #
# # class A:
# #     name = "yan"
# #     __age = "9999"
# #     def func(self):
# #         print(self.__age)
# #         print(A.__age)
# #         print("in the func")
# #
# # a = A()
# # print(a.name)
# # print(A.name)
# # # print(A.__age) # 类名不能调用私有静态字段
# # # print()a.__age # 实例对象不能访问静态字段
# # # # 对于私有静态字段来说,类的外部不能访问
# # a.func()   # 对于私有静态字段来说,类的内部可以访问
# # print(A.__dict__)  # {‘__module__‘: ‘__main__‘, ‘name‘: ‘yan‘, ‘_A__age‘: ‘9999‘, ‘func‘: <function A.func at 0x000001D9035667B8>, ‘__dict__‘: <attribute ‘__dict__‘ of ‘A‘ objects>, ‘__weakref__‘: <attribute ‘__weakref__‘ of ‘A‘ objects>, ‘__doc__‘: None}
# #                    # 发现有_A__age 这个变量,想办法访问他
# #
# # print(A._A__age)
# # print(a._A__age)  # 访问成功。最好不要使用这种方法
#
#
#
# # class B:
# #     __money = 9999999999999
# #
# #
# # class A(B):
# #     name = "yan"
# #     __age = "9999"
# #     def func(self):
# #         print(self.__age)
# #         print(A.__age)
# #         print("in the func")
# #
# #     def find_money(self):
# #         print(self._B__money)   # 对于私有静态字段来说,只能在本类中内部访问,在类的外部或者其派生类中不可访问
# #
# # a = A()
# # a.find_money()   # ok
# # # print(A.__dict__)
#
#
# # 私有方法
#
# class B:
#     def __func(self):
#         print("$2000000000")
#
#     def func2(self):
#         self.__func()
# class A(B):
#     def __func(self):
#         print("func A")
#
#     def func1(self):
#         super().func2()  # 自动传self
#         self.__func()   # 常规使用方法
#
# a = A()
# a.func1()  # 常规方法
# # a._A__func()  # 最好不要使用


# 面试题
class Parent:
    def __func(self):
        print("In the parent")

    def __init__(self):
        self.__func()

class Son(Parent):
    def __func(self):
        print("In the son")

s1 = Son()
class A:
    def __init__(self,name,age,sex):
        self.name = name
        self.__age = age
        self.__sex = sex

    def func(self):
        print(self.__age)
a = A("y",999,"1")
print(a.name)
a.func()
# print(a.__age) # 不能访问
# print(a.__dict__)  # {‘name‘: ‘y‘, ‘_A__age‘: 999, ‘_A__sex‘: ‘1‘}
print(a._A__age)
# print(A._A__age)  # AttributeError: type object ‘A‘ has no attribute ‘_A__age‘
# print(A.__dict__)
# print(A.name)  #AttributeError: type object ‘A‘ has no attribute ‘name‘

 

以上是关于多态,封装的主要内容,如果未能解决你的问题,请参考以下文章

封装继承和多态

JS面向对象 关于类的封装继承多态

面向对象的三大特性:继承封装多态

面向对象之:封装,多态

封装,继承,多态,接口

c# 中的封装继承多态详解