青岛在线制作网站,wordpress ip更换域名,贫困户房屋建设补助在哪个网站公布,网站模板和源码对象 属性 方法面向对象特征#xff1a;分装 继承 多态【不同对象对同一方法响应不同行动】类定义class xxx:........类对象类对象支持两种操作#xff1a;属性引用和实例化 属性引用 使用和 Python 中所有的属性引用一样的标准语法#xff1a;类对象名.属性名 类对象创建…对象 属性 方法 面向对象特征分装 继承 多态【不同对象对同一方法响应不同行动】 类定义 class xxx: .... .... 类对象 类对象支持两种操作属性引用和实例化 属性引用 使用和 Python 中所有的属性引用一样的标准语法类对象名.属性名 类对象创建后类命名空间中所有的命名都是有效属性名。所以如果类定义是这样: class MyClass: i 12345 def f(self): return hello world # 实例化类 x MyClass() # 访问类的属性和方法 print(MyClass 类的属性 i 为, x.i) print(MyClass 类的方法 f 输出为, x.f()) 以上创建了一个新的类实例并将该对象赋给局部变量 xx 为空的对象 执行以上程序输出结果为 MyClass 类的属性 i 为 12345 MyClass 类的方法 f 输出为 hello world 类有一个名为 __init__() 的特殊方法构造方法该方法在类实例化时会自动调用像下面这样 def __init__(self): self.data [] 类定义了 __init__() 方法类的实例化操作会自动调用 __init__() 方法。如下实例化类 MyClass对应的 __init__() 方法就会被调用: x MyClass() 当然 __init__() 方法可以有参数参数通过 __init__() 传递到类的实例化操作上。例如: class Complex: def __init__(self, realpart, imagpart): self.r realpart self.i imagpart x Complex(3.0, -4.5) print(x.r, x.i) # 输出结果3.0 -4.5 self代表类的实例而非类 类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self。 class Test: def prt(self): print(self) print(self.__class__) t Test() t.prt() 以上实例执行结果为 __main__.Test instance at 0x100771878
__main__.Test 从执行结果可以很明显的看出self 代表的是类的实例代表当前对象的地址而 self.class 则指向类 self 不是 python 关键字我们把他换成xxx 也是可以正常执行的: class Test: def prt(xxx): print(xxx) print(xxx.__class__) t Test() t.prt() 以上实例执行结果为 __main__.Test instance at 0x100771878
__main__.Test 类的方法 在类的内部使用 def 关键字来定义一个方法与一般函数定义不同类方法必须包含参数 self, 且为第一个参数self 代表的是类的实例 class people: #定义基本属性 name age 0 #定义私有属性,私有属性在类外部无法直接进行访问 __weight 0 #定义构造方法 def __init__(self,n,a,w): self.name n self.age a self.__weight w def speak(self): print(%s 说: 我 %d 岁。 %(self.name,self.age))# 实例化类p people(jike,10,30) 【类的实例化操作会自动调用 __init__() 方法】p.speak() 执行以上程序输出结果为 jike 说: 我 10 岁。 继承 class xxx(父类名): .... .... 需要注意圆括号中父类的顺序若是基类中有相同的方法名而在子类使用时未指定python从左至右搜索 即方法在子类中未找到时从左到右查找基类中是否包含方法。 父类必须与派生类定义在一个作用域内。类定义在另一个模块中时还可以用表达式 class 派生类名(模块名.父类名): 举例 执行以上程序输出结果为 ken 说: 我 10 岁了我在读 3 年级 多继承 class 派生类名(Base1, Base2, Base3): .... ... 需要注意圆括号中父类的顺序若是父类中有相同的方法名而在子类使用时未指定python从左至右搜索 即方法在子类中未找到时从左到右查找父类中是否包含方法。 输出 我叫 Tim我是一个演说家我演讲的主题是 Python 方法重写 子类继承父类构造函数说明 类属性与方法 类的私有属性【不能在外部调用】 __private_attrs两个下划线开头声明该属性为私有不能在类的外部被使用或直接访问。在类内部的方法中使用时 self.__private_attrs。 类的方法 在类的内部使用 def 关键字来定义一个方法与一般函数定义不同类方法必须包含参数 self且为第一个参数self 代表的是类的实例。 self 的名字并不是规定死的也可以使用 this但是最好还是按照约定是用 self。 类的私有方法【不能在外部调用】 __private_method两个下划线开头声明该方法为私有方法只能在类的内部调用 不能在类的外部调用。self.__private_methods。 类的专有方法 __init__ : 构造函数在生成对象时调用__del__ : 析构函数释放对象时使用__repr__ : 打印转换__setitem__ : 按照索引赋值__getitem__: 按照索引获取值__len__: 获得长度__cmp__: 比较运算__call__: 函数调用__add__: 加运算__sub__: 减运算__mul__: 乘运算__truediv__: 除运算__mod__: 求余运算__pow__: 乘方 另外 # 针对__str__方法的例子 # 各种运算符重载 反向运算符重载 __radd__: 加运算__rsub__: 减运算__rmul__: 乘运算__rdiv__: 除运算__rmod__: 求余运算__rpow__: 乘方复合重载运算符 __iadd__: 加运算__isub__: 减运算__imul__: 乘运算__idiv__: 除运算__imod__: 求余运算__ipow__: 乘方 举例 # 关于 __name__ # 类的静态方法、普通方法、类方法 pass ---占位符表示稍后输入 如果子类定义与父类同名的方法或属性会自动覆盖父类的方法或属性 子类覆盖父类方法时若需要父类中该方法中的属性则要先调用父类该方法获得所需要的属性再重写 1.调用未绑定的父类方法该重写方法第一行 父类名.xxxx(self ---将子类对象传入)2.使用super函数super.父类方法名 ---不需要给定任何父类的名字自动一层层找出 默认要求类定义中方法的第一个参数是self this,表示不同对象调用该方法时传入一个该对象参数用以区别谁调用此方法 构造方法_init_(self) ---构造方法实例化对象的时候会自动调用它默认参数形式如上此时不需要实例化的时候给与参数_init_(self,name) ---此时需要给个参数 xxYy(zz)可以重写此方法自定义初始化操作 转载于:https://www.cnblogs.com/expedition/p/10693091.html