学习笔记60_python面向对象

****

//可以给函数参数设置默认值

def stu_register(name,age,course,country="CN"):

若你的函数在定义时不确定用户想传入多少个参数,就可以使用非固定参数

,例如:def stu_register(name,age,*args):  ,这个*args就相当于c#中的 param [] class1  args 这样子

//类的创建

class ClassName

  '''

   注意,属性可以在__init__中,直接定义

  '''

  PropertyName = value #可以这样来定义类的属性,相当于c#中的类的静态属性,属于类而不属于对象,使用 " 类名.属性"来调用,又叫"公有变量"

  def __init__(self,Name,age): 

     #这里是属于对象的属性

    self.Name = 'aaaaa'  

    self.age =11

    函数体

  def hellow(self):

    #'''要在其他成员方法中使用self,也要这样'''

    print("my name is %s" ,self.Name)

  @property #定义只读属性,可以使用  a = instance.fullnfo #不需要a =instacne.fullinfo(),原理是,修饰器将 fullinfo  从一个指向方法的变量,替换成一个执行结果

  def fullInfo(self):

    return self.Name + self.age

  @classmethod #定义类方法,只能访问类变量,而不能访问实例变量,例如这里,只能访问 self.Name,不能访问self.PropertyName

  def Show(self):

    #todo

  @staticmethod #定义静态方法,这里原本hellow的调用,可以 instance.hellow()即可,不用传参,而这里,要变成 instance.hellow2(instance),或者 ClassName.hellow2(instance)

  def hellow2(self):

    print("my name is %s" ,self.Name)

  @fullInfo.setter #定义可改属性,使用的时候,直接  instance.fullinfo = "aaa"

   def fullinfo(self,Name)

   self.Name=Name

  @fullinfo.deleter,使用的时候,就可以 del instance.fullinfo ,那么就会调用这里的代码了

   def fullinfo(self)

   self.isdelete = true;

     def __getitem__(self, key):  #内置函数,相当于C#中的索引器 调用  result = obj['k1']   , 自动触发执行 __getitem__
    print('__getitem__',key)
    
         def __setitem__(self, key, value):   #内置函数,相当于C#中的索引器 调用  obj['k2'= 'alex'  , 自动触发执行 __setitem__
    print('__setitem__',key,value)

         def __delitem__(self, key):
    print('__delitem__',key)

//self相当于this的意思

 (以上的类属性,相当于c#中的类的静态成员)

类的继承:

**************导入包的两中办法******************

1.全部导入 import 包名   ,一般是文件名,类似于 demo.py,

那么,实例化时,就要    a = new demo.Class()

2.部分导入 from demo import Class1,Class2,仅仅导入Class1和Class2

3.导入所有 from demo inport *,导入所有;

4.导入特殊模块

import os #会默认去默认的路径下去找

******************************************************************************************************************************************

//关于构造函数

class childClass(father1,father2):#可以多重继承

  def__init__(self):

    #自己的构造方法,不会默认调用父类的构造方法,如果想掉,要

    super()#这样子来掉父类的构造方法

******************************************************************************************************************************************

子类直接写方法,如果跟父类方法名一致,就直接覆盖了

******************************************************************************************************************************************

//关于多重继承的构造函数

多重继承的supper():如果 father1继承于father2 (他们都写了构造函数),

child继承与father1和father2,那么father1和father2的构造函数仅仅会被调用一次,而不会  father1调一次fanther2, father2又调一次它自己的。

******************************************************************************************************************************************

//创建类的私有属性

 class myclass:

  __privateProperty = "aaaa"  #这个为私有属性,特点是在前面加两个"_",那么就跟C#的私有属性一样了

//

//python是没有 protect 属性的

  

原文地址:https://www.cnblogs.com/pylblog/p/8244632.html