Python面向对象程序设计类变量与成员变量、类方法与成员方法用法分析

作者:微信1257309054 时间:2022-08-11 15:43:43 

本文实例讲述了Python面向对象程序设计类变量与成员变量、类方法与成员方法用法。分享给大家供大家参考,具体如下:

类变量与成员变量

在类中声明的变量我们称之为类变量[静态成员变量],

init()函数中声明的变量并且绑定在实例上的变量我们称之为成员变量。

类变量直接可以通过类名来调用。

1、若类变量与成员同时存在并且同名

使用对象来调用的时候,获取的结果是成员变量的值,

使用类名来调用,获取的是类变量的值。

2、若类变量存在,成员变量不存在,

使用对象来调用的时候,它首先寻找成员变量,

如果成员变量不存在。则去寻找类变量。

3、若类变量不存在,成员变量存在:

使用类名来调用,则会报错

总结:

类变量通过类名或者对象来调用都不会报错,但是成员变量只能通过对象来调用。

通过对象来修改类属性的时候,只能作用到对象自己本身,作用不到类,

若是通过类名来修改类属性,则只对类变量的值进行修改。


class Person(object):
 # 类变量
 name = "haha"
 age = "19"
 height = 170
 def __init__(self,name,age,weight):
   # 成员变量
   self.name = name
   self.age = age
   self.weight = weight
 def sayHeight(self):
   print(self.height)
per = Person("xiaoming",19,50)
print(per.name)
print(Person.name)
# print(Person.weight)
per.height = 190
print(per.height)
print(Person.height)
print('*********')
Person.height = 200
print(Person.height)
print(per.height)
per.sayHeight()

输出:

xiaoming
haha
190
170
*********
200
190
190

类方法与成员方法

类方法,成员方法

类方法:使用类名来调用的方法

成员方法:使用对象来调用的方法

若一个方法定义在类中,但是没有参数[一般默认self],此时我们只能通过类名来调用

若我们需要使用到一个类的对象,首先要实例化。


class Person(object):
 def __init__(self,name,age):
   self.name = name
   self.age = age
 def say(self):
   print("I am %s, I am %d year old"%(self.name,self.age))
 def sayHello():
   print('hello I am class function')
per = Person("xiaoming",19)
per.say()
Person.sayHello()

输出:

I am xiaoming, I am 19 year old
hello I am class function

类方法与静态方法

静态方法

当调用此方法时,不会将类的实例传递给它。

在类中定义的函数。

无需实例化类,就可以调用。它的定义在继承中,是不可变的。

类方法:

当调用此方法时,将函数所属的类作为第一个参数传递。


class A(object):
   def foo(self, x):
     print("executing foo(%s, %s)" % (self, x))
   @classmethod
   def class_foo(cls, x):
     print("executing class_foo(%s, %s)" % (cls, x))
   @staticmethod
   def static_foo(x):
     print("executing static_foo(%s)" % x)
 a = A()
 # 调用foo函数,参数传入1
 a.foo(1)
 # 调用class_foo,参数传入1
 A.class_foo(1)
 # 调用static_foo,参数传入1
 A.static_foo(1)
 a.static_foo(1):

输出:

executing foo(<__main__.A object at 0x0000024F126489B0>, 1)
executing class_foo(<class '__main__.A'>, 1)
executing static_foo(1)
executing static_foo(1)

下划线

下划线定义特殊的方法,一般情况下是系统定义名字,
如:

__init()____del()__

前双下划线(age):表示私有类型的变量(privated),只能在本类中进行访问,外界不能直接访问。如__age.

单下划线(_age):以单下划线开头的表示保护类型变量(protected),

保护类型的变量只允许本身以及子类访问,不能用于from module import *

[使用单下划线开头的时候,虽然变量能够直接被访问,但是请把变量视为一个保护类型的变量,尽量不要去访问。

希望本文所述对大家Python程序设计有所帮助。

来源:https://blog.csdn.net/lm_is_dc/article/details/80166817

标签:Python,面向对象,类变量,成员变量,类方法,成员方法
0
投稿

猜你喜欢

  • python 实现倒计时功能(gui界面)

    2021-03-05 14:19:55
  • python输入中文的实例方法

    2023-08-03 03:25:43
  • 利用Java正则表达式校验邮箱与手机号

    2023-07-03 15:14:54
  • Oracle SQL性能优化系列学习二

    2010-07-23 13:23:00
  • Mysql数据库名和表名的大小写敏感性问题

    2010-06-07 14:07:00
  • 5个充满想象力的Web调色板

    2008-08-02 12:55:00
  • HTML文件HEAD内部标签用法浅析

    2008-07-06 20:56:00
  • python数据类型bytes 和 bytearray的使用与区别

    2021-08-26 05:51:48
  • python opencv进行图像拼接

    2022-09-10 16:13:01
  • python提取照片坐标信息的实例代码

    2023-06-01 16:37:10
  • 基于AJAX技术提高搜索引擎排名

    2008-01-24 12:45:00
  • ASP.NET(AJAX+JSON)实现对象调用

    2023-07-19 12:29:33
  • Oracle字符集修改查看方法

    2009-11-05 21:45:00
  • 交互设计师的尴尬-我的强项是什么?

    2008-12-29 14:00:00
  • 如何利用Image Data Type在主页中显示图形?

    2010-01-01 15:13:00
  • 利用Yahoo Pipes和jQuery做一个RSS挂件

    2010-06-08 13:40:00
  • 实际应用:MySQL5存储过程编写

    2008-11-11 12:25:00
  • 关于文件命名

    2009-09-18 16:29:00
  • SQL学习笔记八 索引,表连接,子查询,ROW_NUMBER

    2011-09-30 11:18:24
  • 解决Golang中goroutine执行速度的问题

    2023-08-25 20:12:12
  • asp之家 网络编程 m.aspxhome.com