面向对象--类,嵌套

Posted wangjun187197

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象--类,嵌套相关的知识,希望对你有一定的参考价值。

一:类的成员:

例:

class Foo:          #创建类
    #方法
    def __init__(self,name):
            #实例变量/字段
            self.name = name
    #方法
    def func(self):
            pass

#obj.Foo类的对象
#obj.Foo类的实例

obj = Foo(四大龙王)

成员分为三类:  字段 - 方法 - 属性

  字段(变量):

    - 实例变量(字段)

      -公有实例变量(字段)

技术分享图片
class Foo:

    def __init__(self,name):
           self.name = name
            self.age = 123

    def func(self):
          print(self.name)


obj = Foo(李哥)
print(obj.name)
print(obj.age)
obj.func()
View Code

 

      -私有实例变量(字段)

技术分享图片
class Foo:
    def __init__(self,name):
        #私有实例变量(私有字段)
        self.__name = name   #私有

        self.age = 123

    def func(self):
        print(self.__name)

obj = Foo(小狗)
print(obj.age)
#obj.__name  #无法访问
obj.func()        #找到一个内部:func, 让func帮助执行内部私有__name
View Code

 

    -类变量(静态字段)

      -公有类变量(静态字段)

技术分享图片
class Foo:
    country = "中国"

    def __init__(self):
        pass

    def func(self):
        #内部调用
        print(self.country)
        print(Foo.country)   #推荐
#外部调用

print(Foo.country)

obj = Foo()
obj.func()
View Code

 

      -私有类变量(静态字段)

技术分享图片
class Foo:
    __country = "中国"

    def __init__(self):
        pass

    def func(self):
        #内部调用
        print(self.__country)
        print(Foo.country)           #推荐

#外部无法调用私有类变量
#print(Foo.country)

obj = fooc()
obj.func()
View Code

 

字段:

class Foo:
    #类变量(静态字段)
    country = "中国"
    
    def __init__(self,name):
           #实例变量(字段)
            self.name = name

    def func(self):
            pass


"""
准则:
    实例变量(字段)访问时,使用对象访问,即:obj.name
    类变量(静态字段)访问时,使用类方法,即Foo.country (实在不方便的时候才用对象访问)

"""

什么时候使用变量?

  当所有对象中有共同的字段时要改都改,要删都删时,可以将实例变量(字段)提取到类变量(静态字段)

方法:

方法分为:

  -实例方法:由对象调用,至少一个self参数;执行实例方法时,自动将调用该方法的对象赋值给self.

技术分享图片
class Foo(object):
    def __init__(self,name):
        self.name = name

    #实例方法
    def func(self):
        print(self.name)

obj = Foo(..)
obj.func()
View Code

  -静态方法:由类调用,无默认参数.

技术分享图片
class Foo(object):
    def __init__(self,name):
        self.name = name

    #静态方法,如果无需使用对象中封装的值,那么久可以使用静态方法
    @staticmethod
    def display(a1,a2):
        return a1+a2
Foo.display(1,3)
View Code

  -类方法:由类调用,至少一个cls参数,执行类方法时,自动将调用该方法的类赋值给cls.

技术分享图片
class Foo(object):
    #类方法,cls是类
    @classmethod
    def show(cls,x1,x2):
        print(cls,x1,x2)
#执行类方法
Foo.show(1,8)
View Code

方法包含:实例方法,静态方法,类方法,三种方法在内存中都归属于类,区别在于调用方式不同.

属性

1:属性的基本使用

技术分享图片
# ##############定义###############
class Foo:
    def func(self):
        pass


    #定义属性
    @property
    def prop(self):
        pass

# ###############调用###############
foo_obj = Foo()

foo_obj.func()
foo_obj.prop                #调用属性
View Code

Python的属性的功能是:属性内部进行一系列的逻辑计算,最终将计算结果返回。

注意:

  在定义时,在方法上添加@property;

  属性仅有一个self参数

  无需使用括号

  方法: foo_obj.func()

  属性:foo_obj.prop

  属性存在的意义是:访问属性时可以制造出和访问字段完全相同的假象

  属性通过方法改造出来,如果Python中没有属性,方法完全可以替代其功能

2.属性的两种定义方式

属性的定义有两种方式:

  装饰器 即:在方法上应用装饰器

  静态字段 即:在类中定义值为property对象的静态字段

二:嵌套

技术分享图片
"""
创建三个学校且三个学校的设施内容等都是一致.
"""
class School(object):
    def __init__(self, name, address):
        self.name = name
        self.address = address

    def speech(self):
        print(讲课)


obj1 = School(老男孩北京校区, 美丽富饶的沙河)
obj2 = School(老男孩上海校区, 浦东新区)
obj3 = School(老男孩深圳校区, 南山区)


class Teacher(object):
    def __init__(self, name, age, salary):
        self.name = name
        self.age = age
        self.__salary = salary
        self.school = None


t1 = Teacher(李杰, 19, 188888)
t2 = Teacher(艳涛, 18, 60)
t3 = Teacher(女神, 16, 900000)
# ############## 老师分配校区
t1.school = obj1
t2.school = obj1
t3.school = obj2
# ####################################
# 查看t1老师,所在的校区名称/地址
print(t1.school.name)
print(t1.school.address)
print(t1.name)
print(t1.age)
t1.school.speech()

# 准则: 字段和方法的归类.
View Code

 

以上是关于面向对象--类,嵌套的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段——JS中的面向对象编程

VSCode自定义代码片段9——JS中的面向对象编程

《C++ Primer》之面向对象编程

面向对象的成员与嵌套

面向对象 成员和嵌套

面向对象---成员,嵌套(建模)