类的方法的分类: 公有方法、私有方法、静态方法和类方法公有方法
公有方法:方法名前后都带有__,比如module
定义方式:def namemethod(self)
调用方式:对象名.公有方法私有方法
私有方法:私有方法:方法名只有前面带有__,比如 __testPrivate。
定义方式:def __namemethod(self)
调用方式:self._namemethod。注意:不能通过对象名直接调用。只能在属于对象的方法中通过self调用,或者在外部通过python的压缩规则进行调用。
(后文会结合私有属性,附上例子)类方法
类方法
可以直接通过类名调用,也可以通过类的实例访问
静态方法和类方法都无法访问类实例属性,能通过类访问类属于类属性。
类方法,第一个参数必须要默认类,一般习惯用cls。类方法的形参 cls,代表类本身
定义方式:
@classmethod
def methodname(cls)
常见场景
类方法用在模拟java定义多个构造函数的情况。
静态方法
静态方法
可以直接通过类名调用,也可以通过类的实例访问。
静态方法和类方法都无法访问类实例属性,能通过类访问类属于类属性。
静态方法对参数没有要求
定义方式:
@staticmethod
def methodname()
调用方式:类名.方法名
常见场景
类中静态方法方法调用静态方法的情况。静态方法和类方法的简单对比
1、两者都可以通过类对象或类名访问;静态方法和类方法都无法访问实例变量的,但可以通过类名访问类属性。
2、静态方法和类方法,可以减少 创建多实例时 所创造出来的内存空间,加快运行速度
代码
三、关于属性1:实例属性:最好在__init__(self,…)中初始化,内部调用时都需要加上self.2:类属性:
在__init__()外初始化
类的实例或者直接通过类名都可以访问3:私有属性:
1、单下划线开头:告诉别人这是私有属性,但是外部依然可以访问更改
2、双下划线_开头:外部不可访问。无论是类名还是类实例。
(python中没有绝对真正的私有属性)
实例属性示例代码
*
一个类的对象可以通过点语法为当前类的对象添加一个属性,但这种方式添加的属性只属于这个属于对象,是实例属性属性。
代码
访问私有属性和私有方法 示例
class User:
country="类变量"
_title="类变量,私有变量"
def __init__(self):
self.name="公有变量"
self._age="公有变量"
info="局部变量"
def test(self):
self.address="公有变量"
email="局部变量"
u=User()
u.gender="独有变量"
city="全局变量"
info="全局变量"
def test():
info="全局变量"
global city # 全局变量
city="全局变量"
"""............分割线.................."""
class World:
def __init__(self,name,age):
self.name=name
self.age=age
def instance_method(self,info):
massage="你好"
print("实例方法")
@classmethod
def class_mathod(cls,info):
message="你好"
print("类方法")
@staticmethod
def __setstate__(info):
message = "你好"
print("静态方法")