面向对象之成员

一、总概

二、面向对象中类的成员组成

1、字段

包含静态字段(每个对象都有一份)和普通字段(每个对象都不同的数据)

class Person():
    company=‘neusoft‘#静态字段
    def __init__(self,name,age,gender):
        self.N=name #普通字段
        self.A=age
        self.G=gender
#执行静态字段
print(Person.company)#静态字段由类调用
#访问普通字段
r=Person(‘tina‘,18,‘female‘)
print(r.A)#普通字段由对象来调用

2、方法

包括静态方法(@staticmethod,无需使用对象封装的内容)、类方法(classmethod)、普通方法(使用对象中的数据)

class Person():
    def __init__(self,name,age):
        self.name=name
        self.age=age
    def f1(self):#普通方法
        print(1111)
    @classmethod#类方法
    def f2(cls):
        print(2222)
    @staticmethod#静态方法
    def f3():#静态方法没有默认参数(可以加任何参数)
        print(2222)
#执行普通方法:
ret=Person(‘tina‘,18)
ret.f1()
#调用类方法:
Person.f2()
#调用静态方法:
Person.f3()

普通方法:由对象调用;至少一个self参数;执行普通方法时,自动将调用该方法的对象赋值给self;

比如:调用obj1.modify()  在调用的时候就相当于把对象赋值给方法:Dbcontrl.modify(obj1)  他的触发者是对象!

类方法:由类调用; 至少一个cls参数;执行类方法时,自动将调用该方法的类复制给cls;

类方法的触发者是类,当类在触发的时候,把自己当作参数传给cls = class

类方法很少用!

静态方法:由类调用;无默认参数;

其实你在类中使用静态方法:类+静态方法其实就等于一个函数!

触发者是类,常用于一个工具类,在调用的时候不需要实例化!举例来说有个工具类,如果是普通方法每次调用的都需要实例化,如果有非常非常多的人来调用难道每次都需要实例化吗?浪费内存空间,用静态方法那么你在调用的时候就不需要实例化他了!

针对三种方法的总结概括

3、特性

又称属性或普通特性(@property 即将方法伪造成字段)

在python中属性的使用时非常少的,但是在其他语言中属性用的非常多,因为在python中属性是后来才有的,他的功能目前还不是很强大!但是他要告诉人们我也是支持属性的,所以才有了这个属性!

属性是由方法变种而来,如果python中没有属性,方法完全可以代替其功能。

属性存在的意义是:访问属性时可以制造出和访问字段完全相同的假象。

属性的基本使用:

# ############### 定义 ###############
class Pager:

    def __init__(self, current_page):
        # 用户当前请求的页码(第一页、第二页...)
        self.current_page = current_page
        # 每页默认显示10条数据
        self.per_items = 10 

    @property
    def start(self):
        val = (self.current_page - 1) * self.per_items
        return val

    @property
    def end(self):
        val = self.current_page * self.per_items
        return val

# ############### 调用 ###############

p = Pager(1)
p.start 就是起始值,即:m
p.end   就是结束值,即:n
#特性的补充内容:
class Foo:
    def func(self):
        print(‘func‘)
    @property
    def pp(self):
        return 123
    @pp.setter
    def pp(self,value):
        print(value)
    @pp.deleter
    def pp(self):
        print(‘del‘)
obj=Foo()
print(obj.pp)
obj.pp=9999
del obj.pp

#特性的另一种使用方式:
class Foo():
    def f1(self):
        return ‘sdkdlalg‘
    def f2(self,value):
        print(value)
    def f3(self):
        print(‘lsfjsljsl‘)
    ZO=property(fget=f1,fset=f2,fdel=f3,doc=‘此处是说明‘)
obj=Foo()
ret=obj.ZO
obj.ZO=122324
del obj.ZO

二、如何快速判断什么时候用类执行,什么时候用对象执行

个人总结:

遇到普通即用对象,其他就用类。(即普通方法、普通字段、普通特性用对象来调用;类方法,静态字段、静态方法则用类来调用执行)

老师总结:

有self的,对象调用;无self,类调用

三、成员修饰符

成员修饰符包括公有&私有

这里主要强调一下

四、类的特殊成员

原文地址:https://www.cnblogs.com/tina-python/p/5555275.html

时间: 2024-08-30 14:33:43

面向对象之成员的相关文章

面向对象类成员

面向对象类成员:字段,方法,属性 一.字段: 举个例子: class Foo: def __init__(self, name): self.name = name 其中的self.name就是字段,不过这是一个普通的字段,保存在对象中,可以通过对象去访问例如: 1 obj = Foo("DJC") 2 print(self.name) 3 4 >>>DJC 除了普通字段还有静态字段来看以下代码: class Foo: s = 123 def __init__(sel

python面向对象之类成员

一.概述 上篇<python面向对象OOP>介绍了python面向对象的基础初级入门部分,提到了类的定义,使用,类的三大特性;经典类,新式类在查找时的区别等,有了前面的基础,本文接着描述面向对象中类成员;先整体描述下,类中的成员分以下几部分: #类成员  #字段(属性):      普通字段  属于对象,保存在对象中,只能通过对象访问      静态字段  属于类,保存(一份)在类中(所有对象共享的字段属性),执行时可以是类访问也可以是对象访问  #方法:      普通方法  保存在类中,又

面向对象-类-成员变量-局部变量-this

1.能够理解面向对象的思想     面向对象是基于面向过程的编程思想,强调的是对象,由对象去调用功能.它是一种更符合人类习惯的编程思想,可以将复杂的事情简单化,将我们的角色从执行者变成了指挥者. 2.能够明确类与对象关系     类是客观世界中相关事物的基本特征抽象.对象是该类事物的具体体现.比如手机是一个类,而iphone7就是一个对象. 3.定义学生类 public class Student{     //成员变量     String name;     int age; //成员方法 

07_面向对象(成员变量和局部变量区别、类作为形式参数的问题、匿名对象、封装、private关键字、this关键字、构造方法、成员方法、static关键字、静态变量和成员变量、main方法)_02

7:构造方法(掌握)    (1)作用:用于对对象的数据进行初始化    (2)格式:        A:方法名和类名相同        B:没有返回值类型,连void都不能有        C:没有返回值                思考题:构造方法中可不可以有return语句呢?        可以.而是我们写成这个样子就OK了:return;        其实,在任何的void类型的方法的最后你都可以写上:return;    (3)构造方法的注意事项        A:如果我们没写构

python之旅六【第七篇】面向对象之类成员

面向对象的类成员 相关知识点 一  字段 字段包括:普通字段和静态字段,他们在定义和使用中有所区别,而最本质的区别是内存中保存的位置不同, 普通字段属于对象 静态字段属于类

C++ 面向对象 类成员函数this指针

每个类成员函数都只涉及一个对象, 即调用它的对象. 但有时候方法可能涉及到两个对象, 在这种情况下需要使用C++ 的 this 指针 假设将方法命名为topval(), 则函数调用stock1.topval()将访问stock1的对象数据:stock2.topval()将访问stock2的对象数据: 如果希望该方法的两个对象进行对比, 则必须将第二个对象作为参数传递给它.这时候涉及到隐式和显式: top = stock1.topval(stock2); 隐式的访问了stock1, 显示的访问了s

JavaScript面向对象(二)——成员属性、静态属性、原型属性与JS原型链

前  言 上一篇博客(https://www.cnblogs.com/qdjianghao/p/10177360.html )中,我们介绍了JS中的面向对象,并详细的解释了this的指向问题.本篇博客,我们继续来学习JS的面向对象.来深入理解一下JavaScript OOP中的成员属性/方法.静态属性/方法.原型属性/方法,并且一起来探讨一下JS中的原型与原型链. 一 成员属性与成员方法 在构造函数中,通过this.属性声明.或者实例化出对象后,通过"对象.属性"追加的.都属于成员属性

面向对象_成员变量和局部变量的区别

作用范围: 局部变量作用于函数中或者语句中(定义在函数或语句中(比如for语句),必须初始化) 成员变量作用于整个类中(定义在类中,有默认初始化值,可以定义显示初始化值) 在内存中的位置: 成员变量在堆内存中.因为对象的存在,才在内存中存在. 局部变量在栈内存中. 如果成员变量没有定义显示初始化,那么系统默认会初始化(在堆内存中的变量都会有默认初始化值)byte 0short 0int 0long 0Ldouble 0.0Dfloat 0.0fboolean false引用数据类型默认初始化值都

C#面向对象&mdash;&mdash;对象成员、方法重载、引用类库等

一.方法重载: 1.两个函数同名,就互相构成方法的重载关系 2.重载的函数,必须跟其他函数之间具有不同的参数类型或参数个数 二.字段与属性 类的字段: 类里面是可以直接定义变量的,这些变量就叫类的字段,也叫成员变量. 类的属性(扳手): 本身不存储数据,用来给字段赋值和取值的一个存取过程.可以保护字段. 包含读访问器和写访问器两个函数: 读访问器 get { return Name; } 写访问器 set {                 if(value.Length<=3)