思考:
之前我们在数据类型里面学习到了列表的方法,那是怎么让列表里面放下这么多方法呢?
利用dir()查看列表方法
a = [1,2,3]
print(dir(a))
'''
执行结果:
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__',
'__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__',
'__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__',
'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
'''
1、类的定义
类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法,对象是类的实例。
类是用class来定义的
利用dir()查看类方法
class A:
pass #占个位置
print(dir(A))
'''
执行结果:['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__',
'__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']
'''
2、类的三要素:类名、属性、方法
class Person: #Person为类名
name = 'jackfu' #name为类属性
print(Person.name) '''执行结果:jackfu'''
Person.name2 = 'anan' #在类的外面添加 类属性
print(Person.name2) '''执行结果:anan'''
l = Person() # 类的实例化,l就是具体实例对象
print(l.name) '''执行结果:jackfu'''
类可以访问类属性,实例也可以访问类属性;但是类不可以访问实例属性,实例可以访问实例属性
class Person: #类
name = 'jackfu' #类属性
t = Person() #类的实例化
q = Person() #类的实例化
t.age = 18 #实例属性
print(Person.name) #类访问类属性 执行结果:jackfu
print(t.name) #实例访问类属性 执行结果:jackfu
print(t.age) #实例可以访问实例属性 执行结果:18
print(q.age) #这里也会报错,因为找不到这个属性
print(Person.age) #类不可以访问实例属性,这里会报错
每个实例都是一个独立的变量空间。 不同实例之间的空间互相不可见
3、私有属性
在python中有两私有属性,分别是在属性前加 一个下换线(_) 和 两个下划线(__) 一个下滑线外部可以直接访问,二个下划线外部不可以直接访问
class People:
_aa = 'anan'
__bb = 'jackfu'
l = People()
print(People._aa) #可以直接访问 _aa属性
print(People.__bb) #报错 不可以直接访问 __bb属性
'''若要访问 __bb属性,可以这样'''
print(l._People__bb)
在 Python 中, _ 和 __ 的使用 更多的是一种规范/约定,没有真正限制的目的 定义在类中的私有属性也可以被子类继承
4、类的方法
“方法”就是封装在类里的 一种特殊的函数
class Person:
name = "jackfu"
def run(self): # self 是形参,代表实例本身
print('正在跑') #函数定义在类里面就是方法
lj = Person() #类实例化
Person.run(lj) #类调用方法
lj.run() #实例调用方法
'''
执行结果:
正在跑
正在跑
'''
通常,将默认会传入的那个参数命名为self,用来表示调用这个方法的实例对象本身。
方法总是定义在类中的,但是却叫“实例方法”,因为它表示该类所有实例所共有的行为。
方法的调用和属性调用一样,通过点操作符调用,传参和函数传参一样。