python之类的属性、类的实例、类方法、实例方法、静态方法(25)

# -*- coding: utf-8 -*-
# @File  :
# @Author: dianxiaoer
# @Date  : 2019/11/11
# @Desc  : 类的属性、类的实例、类方法、实例方法、静态方法

# # 1、定义一个类
# class Person:
#     pass
# # 2、创建实例
# zhangsan = Person()
# lisi = Person()
# # 3、实例属性
# zhangsan.name = "python"
# lisi.name = "C++"
# # 4、创建实例时候,__init__方法会被自动调用
# class Person:
#     def __init__(self,name,age,gender):
#         self.name = name
#         self.age = age
#         self.gender = gender
# # 5、属性的访问限制
# # python中定义的普通变量,可以被外部访问。但是有时候,定义的变量不希望被外部访问;
# # 如单下划线"_变量名",双下划綫"__变量名";
# # 6、类属性
# class Person:
#     address = "Mars"
#     def __init__(self,name):
#         self.name = name
# print(Person.address) # 类属性直接绑定在类上面,可以不实例化直接进行 类名.属性 进行访问
# p = Person("C#")
# print(p.address) # 也可以实例化对象来访问
# # 7、类方法
# # @classmethod来标识,对于类方法,第一个参数必须是类对象;
# # 一般以cls作为第一个参数(当然可以用其他名称的变量,但我们一般习惯使用'cls'了);
# # 能够通过实例对象和类对象去访问;【此处注意】
# class People:
#      # 类属性
#      country = 'Mars'
#      # 类方法
#      @classmethod
#      def getCountry(cls):
#          return cls.country
#
# p = Person() # 实例化一个对象
# print(p.getCountry()) # 通过实例对象访问
# print(Person.country) # 通过类对象访问
# 7.1 类方法修改类的属性
# class People:
#     # 类属性
#     country = 'Mars'
#
#     # 类方法
#     @classmethod
#     def getCountry(cls):
#         return cls.country
#
#     @classmethod # 修改类的属性,不要通过实例对象修改类的属性,没意义!!!而是给实例绑定了一个实例属性!!!
#     def setCountry(cls,country):
#         cls.country = country
#
#
# p = People()  # 实例化一个对象
# print(p.getCountry())  # 通过实例对象访问
# print(People.country)  # 通过类对象访问
# p.setCountry("Earth")
# print("#"*10)
# print(p.getCountry())  # 通过实例对象访问
# print(People.country)  # 通过类对象访问
# 8、静态方法
# class People:
#     country = 'Mars'
#
#     @staticmethod
#     def getCountry():
#         return People.country
#
# p = People()
# print(p.getCountry()) # 通过实例对象访问静态方法
# print(People.getCountry()) # 通过类访问静态方法
# 9、为什么用静态方法???
# 静态方法用来存放逻辑性的代码,这些逻辑属于某个类但是和类本身没有交互,即在静态方法中,不会涉及到类中的方法和属性的操作;
# 可以理解为将静态方法存在此类的名称空间中;
# 事实上,在python引入静态方法之前,通常是在全局名称空间中创建函数,但这样会导致代码难以维护;
# import time
#
# class Timer:
#     def __init__(self):
#         pass
#
#     @staticmethod
#     def showTime():
#         pass
# t = Timer()
# now = t.showTime()
# print(now)
# 10、总结
# (1) 类方法的第一个参数是类对象cls,那么通过cls引用的必定是类对象的属性和方法;
# (2)实例方法的第一个参数是实例对象self,通过self引用的可能是类属性、也有可能是实例属性;
#    不过在存在相同名称的类属性和实例属性的情况下,实例属性优先级更高;
# (3)静态方法中不需要额外定义参数,因此在静态方法中引用类属性的话,必须通过类实例对象来引用;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值