python 面向对象(成员)

python 面向对象:

(思维导图 ↑↑↑↑)

类的成员:

  成员分为三类:

    变量:

      - 实例变量(字段)

        -公有实例变量(字段)

        -私有实例变量(字段)

      - 类变量(静态字段)

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

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

实例一:

class Foo:
    # 类变量(静态字段)
    country = "中国"

    def __init__(self, name):
        # 实例变量(字段)
        self.name = name

    def func(self):
        pass


obj1 = Foo('裴杰')
obj2 = Foo('裴狗子')

print(Foo.country)
准则:
实例变量(字段)访问时,使用对象访问,即: obj1.name
类变量(静态字段)访问时,使用类方法,即: Foo.country (实在不方便时,才使用对象)
练习1
obj1.name = 'alex'
print(obj1.name) # alex
print(obj2.name) # 裴狗子

练习2
obj1.country = '美国'
print(obj1.country) # 美国
print(obj2.country) # 中国

练习3
Foo.country = '美国'
print(obj1.country) # 美国
print(obj2.country) # 美国
  方法:
    - 实例方法
      
class Foo(object):
    def __init__(self, name):
        self.name = name

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


obj = Foo('..')
obj.func()
     - 静态方法
class Foo(object):
    def __init__(self, name):
        self.name = name

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

    # 类方法,cls是类
    @classmethod
    def show(cls, x1, x2):
        print(cls, x1, x2)

    # 执行类方法


Foo.show(1, 8)
   属性(通过方法改造出来)
    示例:
class Foo(object):
    def __init__(self):
        pass

    @property
    def start(self):
        return 1

    @property
    def end(self):
        return 10

obj = Foo()
print(obj.start)
print(obj.end)
总结:
1. 编写时
- 方法上方写 @property
- 方法参数:只有一个self
2. 调用时:无需加括号 对象.方法
3. 应用场景: 对于简单的方法,当无需传参且有返回值时,可以使用 @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()

 

 
posted @ 2018-08-28 15:43  背锅文  阅读(254)  评论(0)    收藏  举报