1、静态方法

class C(object):
    @staticmethod
    def f():
        print('runoob');
 
C.f();          # 静态方法无需实例化
cobj = C()
cobj.f()        # 也可以实例化后调用


静态方法:无法访问类属性、实例属性,相当于一个相对独立的方法,跟类其实没什么关系,换个角度来讲,其实就是放在一个类的作用域里的函数而已。
类成员方法:可以访问类属性,无法访问实例属性。

下划线

_ 单下划线:python中不存在真正的私有方法,可以在类的方法或属性前加一个 单下划线,意味着此方法或属性不应该去调用,它并不属于API,例:

class BaseForm(StrAndUnicode):
    ...
 
    def _get_errors(self):
        "Returns an ErrorDict for the data provided for the form"
        if self._errors is None:
            self.full_clean()
        return self._errors
    
    errors = property(_get_errors)

当想使用_get_errors()时,可以通过errors实现。

__ 双下划线:避免子类重写此方法,只允许在该类的内部使用。

前后双下划线

  1. __init__
    一个目录如果包含了 __init__,它就变成了一个包(package),它可以是空的,但必须存在,其他程序才可以从这个目录导入相应的模块或函数,这样的目录称为 namespace package。
    在python 3.3之后,__init__文件可以不需要。

  2. __name__
    标识模块名字的系统变量。
    1、如果模块是被导入的, __name__为模块的名字。
    2、如果模块是被直接运行的,__name____main__

  3. __repr__
    默认显示 "类名+object at+内存地址",可以重写使其输出想要的信息

class CLanguage:
    pass
clangs = CLanguage()
print(clangs)

# 默认
>> <__main__.CLanguage object at 0x000001A7275221D0>

# 修改后
class CLanguage:
    def __init__(self):
        self.name = "C语言中文网"
        self.add = "http://c.biancheng.net"
    def __repr__(self):
        return "CLanguage[name="+ self.name +",add=" + self.add +"]"
clangs = CLanguage()
print(clangs)
>> CLanguage[name=C语言中文网,add=http://c.biancheng.net]
  1. __call__
    使得类实例对象可以像调用普通函数那样,以对象名()形式使用
    Python 中,凡是可以将() 直接应用到自身并执行,都称为可调用对象。可调用对象包括自定义的函数、Python 内置函数以及本节所讲的类实例对象。
    对于可调用对象,实际上“名称()”可以理解为是“名称.call()”的简写
class CLanguage:
    # 定义__call__方法
    def __call__(self,name,add):
        print("调用__call__()方法",name,add)
clangs = CLanguage()
clangs("C语言中文网","http://c.biancheng.net")

>> 调用__call__()方法 C语言中文网 http://c.biancheng.net

hasattr() getattr() setattr()

  1. hasattr()
    判断某个类实例对象是否包含指定名称的属性或方法,语法格式: hasattr(obj,name)
class CLanguage:
    def __init__ (self):
        self.name = "C语言中文网"
        self.add = "http://c.biancheng.net"
    def say(self):
        print("我正在学Python")
clangs = CLanguage()
print(hasattr(clangs,"name"))
print(hasattr(clangs,"add"))
print(hasattr(clangs,"say"))

>>True
True
True