Python封装机制及实现方法
封装(Encapsulation),即在设计类时,刻意地将一些属性和方法隐藏在类的内部,这样在使用此类时,
将无法直接以“类对象.属性名”(或者“类对象.方法名(参数)”)的形式调用这些属性(或方法),
而只能用未隐藏的类方法间接操作这些隐藏的属性和方法。
Python 类中的变量和函数,不是公有的(类似 public 属性),就是私有的(类似 private),这 2 种属性的区别如下:
- public:公有属性的类变量和类函数,在类的外部、类内部以及子类中,都可以正常访问;
- private:私有属性的类变量和类函数,只能在本类内部使用,类的外部以及子类都无法使用。
但是,Python 并没有提供 public、private 这些修饰符。为了实现类的封装,Python 采取了下面的方法:
- 默认情况下,Python 类中的变量和方法都是公有(public)的,它们的名称前都没有下划线(_);
- 如果类中的变量和函数,其名称以双下划线“__”开头,则该变量(函数)为私有变量(私有函数),其属性等同于 private。
除此之外,还可以定义以单下划线“_”开头的类属性或者类方法(例如 _name、_display(self)),这种类属性和类方法通常被视为私有属性和私有方法,虽然它们也能通过类对象正常访问,但这是一种约定俗称的用法。
注意,Python 类中还有以双下划线开头和结尾的类方法(例如类的构造函数__init__(self)),这些都是 Python 内部定义的,用于 Python 内部调用。我们自己定义类属性或者类方法时,不要使用这种格式。
class CLanguage: def setname(self, name): if len(name) < 3: raise ValueError('名称长度必须大于3!') self.__name = name def getname(self): return self.__name # 为 name 配置 setter 和 getter 方法 name = property(getname, setname) def setadd(self, add): if add.startswith("http://"): self.__add = add else: raise ValueError('地址必须以 http:// 开头') def getadd(self): return self.__add # 为 add 配置 setter 和 getter 方法 add = property(getadd, setadd) # 定义个私有方法 def __display(self): print(self.__name, self.__add) clang = CLanguage() clang.name = "C语言中文网" clang.add = "http://c.biancheng.net" print(clang.name) print(clang.add)
Python继承机制及其使用
继承机制经常用于创建和现有类功能类似的新类,又或是新类只需要在现有类基础上添加一些成员(属性和方法),但又不想直接将现有类代码复制给新类。
也就是说,通过使用继承这种机制,可以轻松实现类的重复使用。
子类继承父类时,只需在定义子类时,将父类(可以是多个)放在子类之后的圆括号里即可。语法格式如下:
class 类名(父类1, 父类2, ...):
#类定义部分
注意,如果该类没有显式指定继承自哪个类,则默认继承 object 类(object 类是 Python 中所有类的父类,即要么是直接父类,要么是间接父类)。
另外,Python 的继承是多继承机制(和 C++ 一样),即一个子类可以同时拥有多个直接父类。
123
123
标签:Python,name,python,self,汇总,面向对象,add,父类,属性 From: https://www.cnblogs.com/xiaobaibailongma/p/18049636