python中类的定义,属性,常用的一些查询方法

类用来描述具有相同的属性和方法的对象的集合。
对于在类中定义的函数,称为方法。
类变量不直接叫做类变量,称为属性。
类中主要就是方法和属性

1,类的定义,属性

简单示例

class Person(object):
    name = 'nanfeng'
    age = 18


mor = Person()          #mor就是一个类的实例化
wum = Person()          #wum也是一个类的实例化
mor.sex = 'man'         #实例增加属性

print(Person())                     #可以打印出这个类的内存地址空间
print(id(mor),id(wum))              #通过 id(实例) 可以查看实例化过后的实例对象空间
print(Person.name,Person.age)       #通过Person.属性  来使用类中定义的属性
print(mor.sex)                      #实例调用自身属性
print(wum.sex)                      #这里就会报错,显示这个对象没有这个属性,因为实例化过后,每个实例都是相互独立的

输出结果

<__main__.Person object at 0x7fbcf21e8860>
140449492666968 140449492667920
nanfeng 18
man
Traceback (most recent call last):
  File "/home/pyvip/project/py3code/base_item/13类的定义以及属性.py", line 17, in <module>
    print(wum.sex)                     
AttributeError: 'Person' object has no attribute 'sex'

上面我们在类中定义的属性是可以被访问的,但是如果在属性前面出现了双下划线,比如__age = 18像这样的属性,我们就称为私有属性。这样的属性外部不可以直接访问
简单示例

class Person(object):
    _name = 'Nanfeng'                   #这里一个下划线,可以直接进行访问
    __sex = 'man'                       #这里两个下划线,为私有属性,不能直接访问


mor = Person()
mor._age = 18
print(mor._age)
print(mor._name)


print(mor._Person__sex)                 #虽然规定了为私有属性,但是还是可以访问,并没有正真限制的目的
print(mor.__sex)

输出结果

18
Nanfeng
man
Traceback (most recent call last):
  File "/home/pyvip/project/py3code/base_item/13类的定义以及属性.py", line 32, in <module>
    print(mor.__sex)
AttributeError: 'Person' object has no attribute '__sex'

在python中,_和__的使用,更多的是一种规范,约定,没有正真限制的目的,可以通过 示例._类名__属性 来访问私有属性

2,类中一些常用的查询方法,魔法方法

简单示例

class Person(object):
    '''
    这是一个类中的查询
    '''
    def __init__(self,name,age,sex):            #__init__()初始化方法,其中的self是示例本身,规定了这样写,可以修改,但是不建议,后面的就是参数
        self.name = name
        self.age = age
        self.sex = sex
        print('我是第二个执行的')

    def __new__(cls, *args, **kwargs):          #__new__()方法是类中最先执行的方法,必须要有一个返回的对象,return
        print('我是第一个最先执行的')
        return object.__new__(cls)

    def __str__(self):
        '''
        与__str__()方法类似的一个魔法方法是__repr__()方法
        在python中,str和repr方法在处理对象的时候,分别调用的对象是__str__和__repr__,
        print()打印的对象,调用str函数,如果对象没有定义__str__方法,则调用__repr__方法
        都需要有一个返回的对象return
        __str__ 对使用者(处理后的数据)
        __repr__ 对开发者(原始数据)
        :return:
        '''
        return '我也是需要被执行的魔法方法'

    def __call__(self, *args, **kwargs):        #__call__()方法,无论在什么情况下,示例调用的时候就执行
        return '实例调用的时候我就被执行'

    def __getattr__(self, item):
        print('这是一个当访问不存在的属性是就给你提示的方法')

    # def __getattribute__(self, item):
    #     print('当我们去访问一个属性时会自动调用')
    #     return object.__getattribute__(self,item)


person = Person('Nanfeng',18,'Man')
person()
#person.func()                              #和上面的getattr属性,这就是去访问一个没有的方法func()就会执行__getattr__()
#print(person)

print(hasattr(person,'name'))               #查看是否有这个属性,返回的是bool值,存在就返回True,不存在就返回False
setattr(person,'age',20)

print(getattr(person,'age'))                #返回这个属性的值
print(setattr(person,'height',180))         #设置一个属性的值,可以是新增加的,或者修改原来就有的
print(hasattr(person,'height'))


a = person.__class__        #查看类名
print(a)

b = person.__dict__         #查看全部属性,字典返回
print(b)

c = person.__doc__          #查看对象文档,就是'''里面的内容'''  或者 """里面的内容"""
print(c)

输出结果

我是第一个最先执行的
我是第二个执行的
True
20
None
True
<class '__main__.Person'>
{'name': 'Nanfeng', 'age': 20, 'sex': 'Man', 'height': 180}

    这是一个类中的查询
    

Process finished with exit code 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值