zoukankan      html  css  js  c++  java
  • 面向对象2

    成员和嵌套(组合)

    成员

    1.类的成员:变量,方法,属性

    变量:

      实例变量(字段)

        公有实例变量(字段)

    1 class Foo:
    2     def __init__(self,name):
    3         self.name = name#公有实例变量
    4     
    5      def func(self):
    6         return self.name

        私有实例变量(字段)

    1 class Foo:
    2     def __init__(self):
    3         pass
    4     def __func(self):
    5         print("私有实例变量")
    6 
    7 obj = Foo()
    8 obj.func()#此处无法调用

      类变量(静态字段)

        公有类变量(静态字段)

     1 class Foo:
     2     a = 1#公有类变量
     3     def __init__(self):
     4         pass
     5     def func(self):
     6         return self.a
     7 
     8 obj = Foo()
     9 print(obj.a)
    10 print(Foo.a)

        私有类变量(静态字段)

    1 class Foo:
    2     __a = 1
    3     def __init__(self):
    4         pass
    5     def func(self):
    6         print(self.a)#不能引用,错
    7 
    8 obj = Foo()
    9 obj.func()

    总结:

      公有实例变量可以在类的方法中使用,也可以用实例化的对象调用

      私有实例变量不能在对象调用,只能在类中用其他方法调用后,再使用对象调用

      公有类变量可以在类中调用,也可以用对象调用

      私有类变量只能在类中使用其他方法调用,不能使用对象调用,子类也不能调用(如果必须要用,先在父类中使用方法来调用这个私有类变量,再在子类中调用这个方法)

    方法:

      实例方法

      

    1 class Foo:
    2     def __init__(self,name):
    3         self.name = name
    4     def func(self):#实例方法
    5         print(self.name)
    6 
    7 obj = Foo("abc")
    8 obj.func()

      静态方法

    1 class Foo:
    2     def __init__(self,name)
    3         self.name = name
    4     @staticmethod#静态方法
    5     def display(a1,a2):
    6         return a1 + a2
    7 
    8 Foo.display(1,2)
    #如果无需使用对象中封装的值,就可以使用静态方法

      类方法

    1 class Foo:
    2     @classmethod
    3     def show(cls,x1,x2):#默认第一个参数是类(cls)
    4         print(cls,x1,x2)
    5 
    6 ret = Foo.show(1,2)
    7 print(ret)

    总结:

      实例方法:至少有一个参数,第一个参数必须是实例对象,默认是self

      静态方法:可以没有参数,也无需使用对象中封装的值,方法上面需要加@staticmethod

      类方法:至少有一个参数,第一个参数必须是类,默认是cls,方法上面需要加@classmethod

    属性(通过方法改造出来):

      

     1 class Foo:
     2     def __init__(self):
     3         pass
     4     @property
     5     def start(self):
     6         return 1
     7     @property
     8     def end(self):
     9         return 2
    10 
    11 obj = Foo()
    12 print(obj.start)
    13 print(obj.end)

    总结:属性编写时,方法上面写@property,方法中只有一个参数self

      调用时,无需加括号,直接是对象.方法

      对于简单的方法,当无需传参且有返回值时,可以使用属性

    嵌套(组合):

     1 class Student(object):
     2     def __init__(self,name,age)
     3         self.name = name
     4         self.age = age
     5 #创建三个人
     6 obj1= Student("a",18)
     7 obj2= Student("b",20)
     8 obj3= Student("c",21)
     9 
    10 class School(object):
    11     def __init__(self,name,address)
    12         self.name = name
    13         self.address = address
    14 
    15 #创建三个学校
    16 s1 = School("学校1","北京")
    17 s2 = School("学校2","上海")
    18 s3 = School("学校3","深圳")
    19 
    20 
    21 #给每个学生分配学校
    22 obj1.school = s1
    23 obj2.school = s2
    24 obj3.school = s3
    25 
    26 print(obj1.school.name)
    27 print(obj2.school.name)
    28 print(obj3.school.name)
  • 相关阅读:
    将博客搬至CSDN
    【LeetCode & 剑指offer刷题】熟悉OJ平台3:OJ编程实例
    【LeetCode & 剑指offer刷题】熟悉OJ平台2:如何处理输入问题
    【LeetCode & 剑指offer刷题】熟悉OJ平台1:OJ术语
    【LeetCode & 剑指offer刷题】发散思维题9:Shuffle an Array
    【LeetCode & 剑指offer刷题】发散思维题8:Roman to Integer
    【LeetCode & 剑指offer刷题】发散思维题7:Fizz Buzz
    【LeetCode & 剑指offer刷题】发散思维题6:231. Power of Two(系列)
    【LeetCode & 剑指offer刷题】发散思维题5:65 不用加减乘除做加法
    【LeetCode & 剑指offer刷题】发散思维题4:64 求1+2+…+n
  • 原文地址:https://www.cnblogs.com/s593941/p/9550836.html
Copyright © 2011-2022 走看看