python类定义(普通类属性、实例属性;普通类方法、类方法、静态方法)一遍过

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34444097/article/details/82903927

0x01 代码实例

#!/usr/bin/env python 3.7
# -*- coding: utf-8 -*-
# @Time    : 2018/9/29 20:44
# @Author  : wkend
# @File    : demo1.py
# @Software: PyCharm


# 定义一个类,object表示People所继承的类,若People没有自定义要继承的类,统一用object,
# object表示所有类都会继承的类
class People(object):
    # 定义类属性name
    name_People = ''
    # 定义私有属性weight,以两个__来表示
    __weight = 0

    # 定义构造方法,__init__方法的第一个参数永远是self,表示创建的实例本身
    def __init__(self, name, age, __weight, weight_People):
        # 在构造方法中给类属性name赋值
        People.name_People = name

        # 定义实例属性age
        self.age_self = age

        # 在构造方法中给私有属性__weight赋值,这里用self来调用
        self.__weight = __weight

        # 在构造方法中给私有属性__weight赋值,这里用类名来调用
        People.__weight = weight_People

    # 普通类方法,必须通过外部实例调用,不能用类名调用
    def speak__ordinary(self):
        # 引用类属性
        print('(类属性)name: ' + People.name_People)  # 通过类名引用
        print('(类属性)name: ' + self.name_People)  # 通过实例self引用

        # 引用实例属性
        print('(实例属性)age: ' + str(self.age_self))
        # print('(实例属性)age' + str(People.age_self))  # 错误引用方式

        # 引用私有属性
        print('(私有属性)wight: ' + str(self.__weight))  # 通过实例self访问
        print('(私有属性)wight: ' + str(People.__weight))   # 通过类名来访问


    # 定义一个类方法,用关键字@classmethod来申明,第一个参数必须为类本身,一般用cls表示
    # 不能访问实例属性
    # 通过类名和实例对象调用
    @classmethod
    def speak_class(cls):
        # 访问类属性
        print('(类属性)name: ' + People.name_People)  # 通过类名引用
        # print('(类属性)name: ' + self.name_People)  # 错误,不能通过实例self引用
        print('(类属性)name: ' + cls.name_People)  # 通过类本身来引用

        # 访问私有属性
        # print('(私有属性)wight: ' + str(self.__weight))  # 通过实例self访问
        print('(私有属性)wight: ' + str(People.__weight))  # 通过类名来访问
        print('(私有属性)wight: ' + str(cls.__weight))  # 过类本身来引用


    # 定义静态方法,与类相关,但是不依赖类与实例,
    # 不能访问类属性,参数不能传入self,即不能引用实例属性
    # 通过类名和实例对象调用
    @staticmethod
    def speak_static():
        # 引用类属性
        print('(类属性)name: ' + People.name_People)  # 通过类名引用
        #print('(类属性)name: ' + self.name_People)  # 不能通过实例self引用

        # 引用私有属性
        # print('(私有属性)wight: ' + str(self.__weight))  # 不能通过实例self访问
        print('(私有属性)wight: ' + str(People.__weight))  # 过类本身来引用



# 如果类中已经定义了__init__构造方法,则不能用这种形式实例化得到类对象
# p = People()
p = People('Tom', 30, 55, 66)  # 创建一个实例对象

# 调用普通类方法
print('/**********调用普通类方法*************/')
p.speak__ordinary()  # 通过实例对象来调用普通类方法
# People.speak__ordinary()  #错误,不能用类名来调用普通类方法

# 调用类方法
print('/**********调用类方法*************/')
People.speak_class()    #通过类名调用类方法
p.speak_class()     # 通过实例调用类方法

# 调用静态方法
print('/**********调用静态方法*************/')
People.speak_static()    #通过类名调用静态方法
p.speak_static()     # 通过实例调用静态方法

0x02 输出结果

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_34444097/article/details/82903927
今日推荐