python类相关基础知识学习

python——类

面向对象编程需要使用类,类和实例息息相关,有了类之后我们必须创建一个实例,这样才能调用类的方法:

1
2
class<类名>:
<语句>

类私有属性:_private_attrs两个下划线开头,声明该属性为私有,不能再类的外部被使用或直接访问,在类的内部的方法中使用self._private_attrs
类的方法:在类的内部,使用def关键字可以为类定义个一个方法,与一般函数定义不同,类方法必须包含参数self,且为第一个参数

类的专有方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
__init__       构造函数,在生成对象时调用
__del__ 析构函数,释放对象时使用
__repr__ 打印,转换
__setitem__ 按照索引赋值
__getitem__ 按照索引获取值
__len__ 获得长度
__cmp__ 比较运算
__call__ 函数调用
__add__ 加运算
__sub__ 减运算
__mul__ 乘运算
__div__ 除运算
__mod__ 求余运算
__pow__ 称方

参考:https://blog.csdn.net/brucewong0516/article/details/79114977

class的属性

例:

1
2
3
4
5
6
7
8
9
10
11
class person():
tall = 180
def __init__(self,name,age,weight):
self.name = name
self.age = age
self.weight = weight
def infoma(self):
print('%s is %s weights %s'%(self.name,self.age,self.__weight))

person = person('bruce',25,60)
infoma = person.infoma()

数据属性

数据属性分为类数据属性和实例数据属性

类数据属性:

就是上面的tall,可以被添加

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class person(object):
tall = 180
hobbies = []
def __init__(self, name, age,weight):
self.name = name
self.age = age
self.weight = weight
def infoma(self):
print('%s is %s weights %s'%(self.name,self.age,self.weight))
person.hobbies.extend(["football", "woman"]) #类数据属性属于类本身,可以通过类名进行访问/修改,此处添加"football"、"woman"两个
print("person hobbies list: %s" %person.hobbies )
# class can add class attribute after class defination
person.hobbies2 = ["reading", "jogging", "swimming"] #在类定义之后,可以通过类名动态添加类数据属性,新增的类属性也被类和所有实例共有
print( "person hobbies2 list: %s" %person.hobbies2 )
print( dir(person))
特殊的类属性:

对于所有的类,都有一组特殊的属性

_ _ name_ _:类的名字(字符串)
_ _ doc _ _ :类的文档字符串
_ _ bases _ _:类的所有父类组成的元组
_ _ dict _ _:类的属性组成的字典
_ _ module _ _:类所属的模块
_ _ class _ _:类对象的类型

实例数据属性:

例如name,只能通过实例访问

1
2
3
4
5
6
7
8
9
10
11
Bruce = person("Bruce", 25,60)    #实例数据属性只能通过实例访问
print ("%s is %d years old" %(Bruce.name, Bruce.age) )
# class instance can add new attribute
# "gender" is the instance attribute only belongs to wilber
Bruce.gender = "male" #在实例生成后,还可以动态添加实例数据属性,但是这些实例数据属性只属于该实例
print( "%s is %s" %(Bruce.name, Bruce.gender) )
# class instance can access class attribute
print( dir(Bruce))
Bruce.hobbies.append("C#")
print (Bruce.hobbies)

对于类数据属性和实例数据属性,可以总结为:

1.类数据属性属于类本身,可以通过类名进行访问/修改
2.类数据属性也可以被类的所有实例访问/修改
3在类定义之后,可以通过类名动态添加类数据属性,新增的类属性也被类和所有实例共有
4实例数据属性只能通过实例访问
5在实例生成后,还可以动态添加实例数据属性,但是这些实例数据属性只属于该实例

小结

这里主要知道什么是类数据什么是实例数据,加深对类这一个概念的理解

参考:https://blog.csdn.net/brucewong0516/article/details/79118703

class的访问控制

1、单下划线”_”

在Python中,通过单下划线”“来实现模块级别的私有化,变量除外。一般约定以单下划线””开头的函数为模块私有的,也就是说”from moduleName import * “将不会引入以单下划线”_”开头的函数。
现在有一个模块 example_example.py,内容用如下,模块中一个变量名和一个函数名分别以”_“开头:

2、双下划线”__”

1.对于Python中的类属性,可以通过双下划线”__“来实现一定程度的私有化,因为双下划线开头的属性在运行时会被”混淆”(mangling)。

2.双下划线的另一个重要的目地是,避免子类对父类同名属性的冲突

吐槽:学的很无语,因为看的不是很懂,感觉懵懵的==

https://blog.csdn.net/brucewong0516/article/details/79121179

Author

vague huang

Posted on

2021-02-27

Updated on

2021-02-28

Licensed under

Comments