python中的类(写到封装性)
使用dir(func_name)可以查看函数的内置(隐藏)方法。
关于类的创建
类名应该使用驼峰命名法(CamelCase),中间没有下划线,每个关键字的首字母应该大写。
代码实例:
class PrintDate:
def __init__(self, a=2019, b=1, c=1):
self.year = a
self.month = b
self.day = c
def __str__(self):
return "current date: %s - %s - %s" % (self.year, self.month, self.day)
def print_date(self):
print("current date: %s - %s - %s" % (self.year, self.month, self.day))
我的理解:
1.关于__init __
我觉得函数的隐藏方法(诸如 __init __ 初始化方法云云)可以类比于C++的隐式构造函数,如果用户没有显示的声明或者定义这个构造函数,则python解释器会自动调用这个方法来进行隐式初始化,否则则需要用户自己去定义这个函数。
2.关于__del __
相似的,__del __ 可以类比于析构函数,当对象的生命周期结束后,程序隐式调用析构函数进行“善后”处理。
另外,使用del关键字可以直接删除对象。
3.关于__str__
可以用来指定返回的信息,但一定要有变量接收这个返回值。
4.关于必须添加的参数self
self返回的是当前对象的引用,和C++的this指针有些相似,只不过this指针是隐式使用的,self则必须在函数定义时写到参数当中。
另外,对当前类内的参数进行初始化一定要使用 self 来引用。
三个关键字
关键字 | 写法 | 作用 |
---|---|---|
is | A is B | A和B的引用的地址相同时返回True,否则返回False |
is not | A is not B | A和B的引用的地址不同时返回True,否则返回False |
None | A = None | 先占用一个元素,可以充当任何类型 |
is 与 is not
作用如上所述,举个很生动的例子:
(1)创建两个列表,可以发现他们的地址是不同的,由于列表属于可变类型,因此即使两个列表的内容相同,他们的地址也还是不同的。
(2)使用等于运算符和使用is 判断的结果
由此可见,==只能比较两个元素的值是否相等,而is与is not则可以比较二者的地址是否相同。
一个例子
class PrintDate:
def __init__(self, a=2019, b=1, c=1):
self.year = a
self.month = b
self.day = c
def __str__(self):
return "current date: %s - %s - %s" % (self.year, self.month, self.day)
def print_date(self):
print("current date: %s - %s - %s" % (self.year, self.month, self.day))
class PersonInfo:
def __init__(self, name, sex):
self.name = name
self.sex = sex
self.dd = None # None关键字可以用来表示任何类型
def print_info(self):
print("self_info: name: %s, sex: %s" % (self.name, self.sex))
if self.dd is None: # 使用is或者not is 来判断两变量地址是否相同
print("he has no birthday_info")
return
print(self.dd)
# date = PrintDate(1999, 11, 21)
ps = PersonInfo("cui", "nan")
# ps.dd = date
ps.print_info()
私有属性和方法(在外界不能直接访问)
在属性或者方法的变量名前增加两个下划线。
ex.
__属性名
__方法名
tips
可以使用_类名__属性名来访问私有成员。这也体现了在 python 中没有绝对的私有。