Python类基础

python __name____doc__属性

__name__属性

用于判断当前模块是不是程序入口,如果当前程序正在使用,__name__的值为__main__

if __name__ == '__main__':      # 文件为.test.py, 当直接运行本文件时执行以下代码

    print("第一次测试:")

print("第二次测试:")

如果不添加if __name__ == '__main__',则 import test后就会执行 两次打印

添加if __name__ == '__main__':下方,这样既不会影响到本模块的执行,也不会影响到调用方。

 

__doc__属性

模块本身是一个对象,而每个对象都会有一个__doc__属性。该属性用于描述该对象的作用。

例如:

class MyClass:

    """A simple example class"""

def f(self):

   'abcd'

        print('hello world')

>>>  print(MyClass.__doc__)

Out:  A simple example class

 

>>>  print(MyClass.f.__doc__)

Out:  abcd

若没有 ’abcd’ 则输出 None

 

1. 类定义语法

类定义与函数定义 (def 语句) 一样必须被执行才会起作用。

在实践中,类定义内的语句通常都是函数定义,但也允许有其他语句,有时还很有用

2. 类对象

类对象支持两种操作:属性引用实例化

属性引用 使用 Python 中所有属性引用所使用的标准语法: obj.name 有效的属性名称是类对象被创建时存在于类命名空间中的所有名称。 因此,如果类定义是这样的:

class MyClass:

    """A simple example class"""

    i = 12345

    def f(self):

        print( 'hello world' )

那么 MyClass.i  MyClass.f 就是有效的属性引用,将分别返回一个整数和一个函数对象。

>>>   MyClass.i

Out:  12345

>>>   MyClass.f

Out:  <function __main__.MyClass.f(self)>

 

>>>  x = MyClass()  #实例化对象

>>>  x.f()

Out:  'hello world'

类属性也可以被赋值,因此可以通过赋值来更改 MyClass.i 的值。 

__doc__ 也是一个有效的属性,将返回所属类的文档字符串"Asimple example class"

 

类的 实例化 使用函数表示法。 可以把类对象视为是返回该类的一个新实例的不带参数的函数。 举例来说(假设使用上述的类):

x = MyClass()

创建类的新 实例 并将此对象分配给局部变量 x

实例化操作(调用类对象)会创建一个空对象。 许多类喜欢创建带有特定初始状态的自定义实例。 为此类定义可能包含一个名为 __init__() 的特殊方法,就像这样:

def __init__(self):

    self.data = []

当一个类定义了 __init__() 方法时类的实例化操作会自动为新创建的类实例发起调用 __init__() 因此在这个示例中,可以通过以下语句获得一个经初始化的新实例:

x = MyClass()

当然,__init__() 方法还可以有额外参数以实现更高灵活性。 在这种情况下,提供给类实例化运算符的参数将被传递给 __init__() 例如,

>>> class Complex:

...     def __init__(self, realpart, imagpart):

...         self.r = realpart

...         self.i = imagpart

...

>>> x = Complex(3.0, -4.5)

>>> x.r, x.i

(3.0, -4.5)

强调:

当一个类定义了 __init__() 方法时,类的实例化操作会自动为新创建的类实例发起调用 __init__()

__init__() 还有额外的参数,则类可以实例化参数,除了self的参数。

 

Python有两个内置函数可被用于继承机制:

  • 使用 isinstance() 来检查一个实例的类型isinstance(obj, int) 仅会在 obj.__class__  int 或某个派生自 int 的类时为 True
  • 使用 issubclass() 来检查类的继承关系issubclass(bool, int)  True,因为 bool  int 的子类。 但是,issubclass(float, int)  False,因为 float 不是 int 的子类。

 

类:如果有父类,写在类名后面的括号里;如果没有父类,可以不写括号。

单下划线 、双下划线 、头尾双下划线的说明:

_foo单下划线开头的表示的是protected类型的变量,即保护类型只允许其本身与子类访问,不能用于 from module import *

__doo双下划线的表示的是私有类型(privated)的变量,只能允许这个类本身进行访问

__foo__双头尾下划线定义的是特列方法,类似___init__()之类的  

 

  1. 类里定义函数时,语法规定第一个参数必须是self
  2. 类内定义函数时,如调用自身或父类的函数与变量,须用self. 引导,应该写为 self.函数名 self.变量名

 

 

class Animals:

    def breathe(self):

        print("breathing")

    def move(self):

        print("moving")

    def eat(self):

        print("eating animals")

 

class Mammals(Animals):

    def breastfeed(self):

        print("feeding young")

 

# __init__函数,在新对象实例化时会自动运行,用于给新对象赋初值   

# 注意这是两个下划线

class Cats(Mammals):

    def __init__(self,spots):

        self.spots = spots

    def catch_mouse(self):

        print("catch mouse")

    def left_foot_forward(self):

        print("left foot forward")

    def left_foot_backward(self):

        print("left foot backward")

    def dance(self):

        self.left_foot_forward()

        self.left_foot_backward()

        self.left_foot_forward()

        self.left_foot_backward()

 

if __name__ == "__main__":

    kitty = Cats(10)

    print(kitty.spots)

    kitty.dance()

    kitty.breastfeed()

    kitty.move()

执行结果:

10

left foot forward

left foot backward

left foot forward

left foot backward

feeding young

moving

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值