Python基础——第十章 类的定义 面对对象的编程 self实力本身

 

思考:

之前我们在数据类型里面学习到了列表的方法,那是怎么让列表里面放下这么多方法呢?

利用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,用来表示调用这个方法的实例对象本身。

方法总是定义在类中的,但是却叫“实例方法”,因为它表示该类所有实例所共有的行为。

 

方法的调用和属性调用一样,通过点操作符调用,传参和函数传参一样。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值