面向对象1——类的成员

面向对象1——类的成员

面向对象三大特征:1.封装 2.继承 3.多态

opp就是可以做到分解代码、最小化代码冗余以及对现有的代码进行定制再编写程序,而不是实地修改代码,或从头开始

一、类的成员:

1.字段:普通字段,静态字段

2.方法:普通方法,类方法,静态方法

3.属性

class Person:
    country = 'CN'     #静态字段
    __money = 99999                    #私有静态字段
    def __init__(self,name):
        self.name = name     #普通字段
        self.__age = 30                #私有普通字段
    def show(self):        #普通方法
        self.__think()
        return self.__age
    @classmethod           #类方法
    def cls_func(cls):
        return cls.__money
    @staticmethod
    def static_func():
        return  123
    @property
    def nature(self):    #属性
        return '鸽子'
    def __think(self):       #私有方法
        return '画个圈圈'
           

静态字段属于类,在内存中只保留一份

普通字段属于对象,在每个对象中各自保存

普通方法属于对象,至少含有一个参数self,由对象调用

类方法由类调用,至少含有一个参数cls,

静态方法有类调用,无参数self

属性有两种定义形式,上面是使用装饰器,下面是静态字段方式

def nature(self):
    return '鸽子'
na = property(nature)

公有和私有

静态私有字段,__money = 99999, 错误:Person.__money,可以通过方法间接访问,

私有字段,self.__age = 30,错误:obj.__age

私有方法,错误:obj.__think()

*ps:非要访问私有属性的话,可以通过 对象._类__属性名* obj._Person__money

self

self通常是给类中的方法的第一个参数的名称,Python会自动填入实例对象(也就是方法调用的隐含主体),不必叫self,位置是重点。

二、特殊成员(部分)

__init__    __str__     __call__   __add__   __dict__   __doc__    __name__
__getitem__    __setitem__   __delitem__
__getattr__    __setattr__

class A:
    '''nothing....'''
    def __init__(self,data):
       self.data = data
    def __str__(self,data):
        return self.data
    def __call__(self):
        print('Hellow')
    def __add__(self,other):
        return self.data + other       

__init__ #构造方法,每次实例创建的时候,Python会自动调用它,除了明确传入类的名称的任何参数外,还会隐形的传入新实例。

__str__ 当要打印一个对象时,运行__str__

__add__ 对象出现在“+”表达式中,会运行__add__

__call__ 对象进行调用的时候,会运行__call__

__dict__返回字典形式的所有类或对象中的所有成员

__doc__ 返回类的描述信息

__name__ 返回类名

a = A(1)
print(a)        # A
a()             # Hellow
print(a + 2)    #  3
print(a.__dict__)    # {'data': 1}
print(a.__doc__) #nothing...
print(a.__class__.__name__)   # A

没有定义__dict____doc__,为什么没有报错?,也是因为所有类默认继承object;:class A(object);重新定义会覆盖原有的功能,没有什么意义。

class B:
    def __init__(self,number):
        self.number = number
        self.dic = {'k1':1,'k2':2,'k3':3,}
    def __getitem__(self, key):
        return self.dic[key]
    def __setitem__(self, key, value):
        self.dic[key] = value
    def __delitem__(self, key):
        del self.dic[key]
b =B(88)
n = b['k1']   #触发 __getitem__
print(n)   # 1
b['k4'] = 4  #触发 __setitem__
print(b.dic)  #{'k1': 1, 'k2': 2, 'k3': 3, 'k4': 4}
del b['k2'] #触发__delitem__
print(b.dic)  #{'k1': 1, 'k3': 3, 'k4': 4}       

class C:
    pass
c = C()
c.name = 'Sroxi'
print(c.name)  # Sroxi

类C中没有进行任何定义,c.name = ‘Sroxi‘是如何实现的?

——触发了object的__setattr__方法,子类中重写同样没有什么意义

class Foo:
    def __init__(self):
        object.__setattr__(self, 'info', {})  #在对象中设置值的本质,注意:这里info带引号
    def __setattr__(self, key, value):
        #c.name = 'Sroxi',触发该方法,在object中有字典这样的容器进行接收
        self.info[key]=value
    def __getattr__(self, item):
        #c.name触发该方法,将字典中的对应的value进行返回
        return self.info[item]

原文地址:https://www.cnblogs.com/notfind/p/11565257.html

时间: 2024-10-07 18:28:31

面向对象1——类的成员的相关文章

05 面向对象之:类的成员

一.细分类的组成成员 大致分两块区域,如下图所示: 每个区域详细划分又可以分为: class A: company_name = '老男孩教育' # 静态变量(静态字段) __iphone = '1353333xxxx' # 私有静态变量(私有静态字段) def __init__(self,name,age): #特殊方法 self.name = name #对象属性(普通字段) self.__age = age # 私有对象属性(私有普通字段) def func1(self): # 普通方法

面向对象:类的成员---只是特定(类的)命名空间的全局变量(函数)而已

类变量: 生命周期:全生命周期: 作用域: 1)外部可见性:修饰符确定: 2)继承可见性:修饰符确定. 原文地址:https://www.cnblogs.com/feng9exe/p/11972179.html

面向对象、类与对象、成员与局部变量、封装、private、构造函数、this、static、extends、super、final、abstract、interface、多态、内部类、异常【5】

  本文原创作者:pipi-changing本文原创出处:http://www.cnblogs.com/pipi-changing/ 本文版权归作者和博客园共有,未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接 ,否则保留追究法律责任的权利. 面向对象概念 理解面向对象 面向对象是相对面向过程而言 面向对象和面向过程都是一种思想 面向过程 •强调的是功能行为 面向对象 •将功能封装进对象,强调具备了功能的对象. 面向对象是基于面向过程的. 面向过程   在一个结构体中定义窗口的大小

1,OC语言的前世今生 ,2,OC语言入门,3,OC语言与C的差异,4,面向对象,5,类和对象的抽象关系,6,类的代码创建,7,类的成员组成及访问

1,OC语言的前世今生 , 一, 在20世纪80年代早期,布莱德.麦克(Brad Cox)设计了OC语言,它在C语言的基础上增加了一层,这意味着对C进行了扩展,从而创造出一门新的程序设计语言,支持对象的创建和操作. 二,1985年,被赶出苹果公司的乔帮主成立了Next公司; 三, 1988年,Next计算机公司获得了OC语言的授权,并发展了OC语言库和一个开发环境,1994年,Next计算机公司(同年更名为Next软件公司)和Sun公司针对NEXTSTEP系统联合发布了一个标准规范,名为OPEN

[.net 面向对象编程基础] (9) 类的成员(字段、属性、方法)

[.net 面向对象编程基础] (9) 类的成员(字段.属性.方法) 前面定义的Person的类,里面的成员包括:字段.属性.方法.事件等,此外,前面说的嵌套类也是类的成员. a.类的成员为分:静态成员(static)和非静态成员 b.静态成员用static标识,不标识则默认为非静态成员 c.静态成员属于类所有,动态成员则属于实例所有,即对象 d.静态成员为类所有实例共享,无论类有多少实例或副本,静态成员只占用存中一块区域.非静态成员则在类的每个实例,都创建一个内存域. 下面主要说明一下类的主要

python 面向对象和类成员和异常处理

python 面向对象 你把自己想象成一个上帝,你要创造一个星球,首先你要把它揉成一个个球,两个直径就能创造一个球 class star: '''名字(name),赤道直径(equatorial diameter),极直径(polar diameter)''' def __init__(self,name,eqDiameter,poDiameter): self.name=name self.eqDiameter=eqDiameter #赤道直径 self.poDiameter=poDiamet

Java面向对象——类的成员

Java面向对象——类的成员 摘要:本文主要介绍了类的常见成员. 属性 属性称为成员变量,一般来讲不用赋值,因为有默认值,另外显式赋值没有意义会导致所有由此类创建对象都是此值. 默认值 Boolean类型成员变量的默认值是false. Int类型成员变量的默认值是0. Double类型成员变量的默认值是0.0. String类型成员变量的默认值是null. Char类型成员变量的默认值是\u0000. 类变量 类变量也称为静态变量,在类中以static关键字声明,但必须在方法构造方法和语句块之外

Python之面向对象(五)类的成员

6.8 面向对象之:类的成员 细分类的组成成员 类大概分为两块区域,如下 class A: name="haha"#第一部分 静态字段(静态变量) def __init__(self):#第二部分 方法部分 pass def func(self):#第二部分:方法部分 pass 具体可以细分为: class A: company_name="haha" #静态变量 (静态字段) _iphone="564545"#私有静态变量(私有静态字段) de

【IOS 开发】Object - C 面向对象 - 类 , 对象 , 成员变量 , 成员方法

. 一. 类定义 类定义需要实现两部分 : -- 接口部分 : 定义类的成员变量和方法, 方法是抽象的, 在头文件中定义; -- 实现部分 : 引入接口部分的头文件, 实现抽象方法; 1. 接口部分定义 (1) 接口部分定义格式 接口部分定义格式 : @interface className : superClassName { type _variableName; ... ... } - (type) methodName : type parameterName; @end -- 接口定义