前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python基础(10)——属性

Python基础(10)——属性

作者头像
羊羽shine
发布2019-05-28 13:32:40
2890
发布2019-05-28 13:32:40
举报
文章被收录于专栏:Golang开发Golang开发

属性定义

直接在类里定义

代码语言:javascript
复制
class Student(object):
    gender = 'male'

构造函数定义

代码语言:javascript
复制
class Student(object):
    gender = 'male'
    def __init__(self,name,age):
        self.name = name
        self.age = age

stu = Student("BX",26)
print(stu.name,stu.age,stu.gender)
# BX 26 male

私有属性

代码语言:javascript
复制
class Student(object):
    gender = 'male'
    def __init__(self,name,age,score):
        self.name = name
        self.age = age
        self.__score = score
    def getScore(self):
        return self.__score


stu = Student("BX",26,90)
print(stu.__dict__)
print(stu.getScore())
print(stu._Student__score)
# {'name': 'BX', 'age': 26, '_Student__score': 90}
# 90
# 90
  1. 私有属性添加getter和setter方法
代码语言:javascript
复制
class Money(object):
    def __init__(self):
        self.__money = 0

    def getMoney(self):
        return self.__money

    def setMoney(self, value):
        if isinstance(value, int):
            self.__money = value
        else:
            print("error:不是整型数字")
  1. 使用property升级getter和setter方法
代码语言:javascript
复制
class Money(object):
    def __init__(self):
        self.__money = 0

    def getMoney(self):
        return self.__money

    def setMoney(self, value):
        if isinstance(value, int):
            self.__money = value
        else:
            print("error:不是整型数字")
    money = property(getMoney, setMoney)
  1. 使用property取代getter和setter方法 @property成为属性函数,可以对属性赋值时做必要的检查,并保证代码的清晰短小,主要有2个作用 将方法转换为只读 重新实现一个属性的设置和读取方法,可做边界判定
代码语言:javascript
复制
class Money(object):
    def __init__(self):
        self.__money = 0

    @property
    def money(self):
        return self.__money

    @money.setter
    def money(self, value):
        if isinstance(value, int):
            self.__money = value
        else:
            print("error:不是整型数字")

内建属性

子类没有实现__init__方法时,默认自动调用父类的。 如定义__init__方法时,需自己手动调用父类的 __init__方法

常用专有属性

说明

触发方式

__init__

构造初始化函数

创建实例后,赋值时使用,在__new__后

__new__

生成实例所需属性

创建实例时

__class__

实例所在的类

实例.__class__

__str__

实例字符串表示,可读性

print(类实例),如没实现,使用repr结果

__repr__

实例字符串表示,准确性

类实例 回车 或者 print(repr(类实例))

__del__

析构

del删除实例

__dict__

实例自定义属性

vars(实例.__dict__)

__doc__

类文档,子类不继承

help(类或实例)

__getattribute__

属性访问拦截器

访问实例属性时

__bases__

类的所有父类构成元素

类名.__bases__

__dict__

__getattribute__

获取属性

代码语言:javascript
复制
class Student(object):

    def __init__(self,name):
        self.name = name

    def __getattribute__(self, value):
        return super(Student,self).__getattribute__(value)
    def __setattr__(self, key, value):
        self.__dict__[key] = value

stu = Student("testStu")
print(stu.name)
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.07.16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 属性定义
  • 私有属性
  • 内建属性
    • __dict__
      • __getattribute__
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档