美文网首页
学Python类的定义及通过类创建对象

学Python类的定义及通过类创建对象

作者: 茶树菇小学生 | 来源:发表于2017-10-27 21:43 被阅读0次

一:定义类

定义类语法:class 类名(命名规范:首字母大写,驼峰法):
类的内部结构

二:创建对象

通过 类名 + ‘()’ 方式创建

示例:

class Lei:
     pass

stu = Lei()

三:属性(field):

  1. 实例属性(实例变量):通过类创建出来(定义在 init 里)(由对象自身调用)
    每一个通过该类创建出来的对象都维护自己独有的实例属性,互不影响(每个对象私人订制,专属)
  2. 类属性(类变量):在类里直接创建出来,由类来维护,所有通过该类创建的对象都能访问到(公共资源,大众)
    (由类调用)

示例:

class Student:
   name = '我是类属性'
   def __init__(self):           # __init__必须传一个 self 参数,且该参数永远指向通过该类创建的对象
                                 # init__函数在通过该类创建对象时,自动调用__init__,不需要手动调用
       self.name = '我是实例属性'

四:方法

  1. 实例方法:属于对象自己的方法,由对象自己维护(每个对象的私人订制,专属)
  2. 类方法:属于类的方法,有类来维护(对象的公有财产)
  3. 静态方法:该方法和类与对象没有任何关系,没有任何指针,占据类的命名空间,调用时通过类名 ‘.’方法名调用
    注意:无论变量还是方法,由谁维护,就由谁调用

示例:

class Fangfa:
   def __init__(self):
       print('我是实例方法')
       print(self) # 对象本身,一旦绑定就不会更改

   @classmethod
   def lei(cls):
       print('我是类方法,通过类的修饰器 classmethod声明')
       print(cls) # 类本身,类方法只能访问类属性,不能访问对象属性

   @staticmethod
   def jing(): # 没有参数
       print('我是静态方法,通过类的修饰器 staticmethod声明')
       # 如果某个方法不需要操作类或对象,就可以声明为静态方法
       # 使用场景见下文

静态方法使用场景:假如需要一个类即可以通过传入的时间参数创建对应的对象,也可以通过目前时间创建,就可以通过静态方法
import time  # 引入时间模块

class Date:
   def __init__(self, year, month, day):
       self.year = year
       self.month = month
       self.day = day

   @staticmethod
   def nowDate():
       t = time.localtime() # 创建时间对象
       return Date(t.tm_year, t.tm_mon, t.tm_mday)

date = Date(2017, 10, 27) # 根据传参创建对应对象
print(date.year) # 2017
print(date.month) # 10
print(date.day) # 27

dateNow = Date.nowDate() # 根据当前日期创建对象
print(dateNow.year) # 当前年
print(dateNow.month) # 当前月
print(dateNow.day) # 当前日

五:特性:保护对象属性不被随意修改

原理:通过类的修饰器 @property 声明一个与被保护属性同名函数(该函数由类调用时,与调用属性方法一样)
然后改变该属性名,将该属性访问操作放在特性里(拗口,看代码很简单)

示例

class Texing:
   def __init__(self):
       self._name = '特性'

   @property
   def name(self):
       return self._name # 返回真实该属性值

texing = Texing()
print(texing.name) # 此时访问的name属性其实是类的name方法,值通过name方法返回,
                  # 类似在 _name 属性外加了层保护套
texing.name = '更改值' # 此时这样是不能更改name值,同上理,用户只能访问不能更改

如果需要更改特性值(特性代表的是它保护的属性,如示例中 特性 name 保护的属性时 _name,一下同一)
需要通过设置器(也可以叫拦截器,拦截修改特性的操作,并设定修改值得类型,满足就修改,不满足不让修改)
语法: @特性名.setter
同时也可以删除某个特性值(及对应属性值)
语法:@特性名.deleter,然后通过关键字del删除

示例

class delTexing:
   def __init__(self):
       self._age = 12

   @property
   def age(self):
       return self._age
   @name.setter
   def age(self, value):
       if type(value) is int:
           self._age = value
       else:
           print('修改的值不能是整数外的值')

   @age.deleter
   def age(self):
       del self._age

dT = delTexing()
print(dT.age)  # 12
dT.age = 'ahah'  # 不能更改,因为不是数字类型,打印 ‘修改的值不能是整数外的值’
dT.age = 20
print(dT.age)  # 20 更改成功

del dT.age  #删除age属性

属性私有化:让当前类的私有属性,不能被子类继承到

py中的私有化机制:属性名改写。在所有需要私有化的属性前添加“”,则该属性名会变为:类名_属性名

示例

 class Student:
     def __init__(self):
         self.__name = '张三'

     def __say(self):
         print('hello,我是' + self.__name)

 stu = Student()
 stu._Student__say();
 print(stu._Student__name)

相关文章

  • Python类的构造与初始化

    在Python中,可以通过class关键字定义自己的类,然后通过自定义的类对象类创建实例对象。 python中创建...

  • 学Python类的定义及通过类创建对象

    一:定义类 定义类语法:class 类名(命名规范:首字母大写,驼峰法):类的内部结构 二:创建对象 通过 类名 ...

  • python笔记(十)抽象类

    类也是对象,创建类对象的类被称为元类Python 默认的元类是 type,如果类在定义时没有定义__metacla...

  • 第9章 类

    参考书籍:《Python编程 从入门到实践》 1. 创建和使用类 1.1 创建类 定义: 类:定义的一大类对象都有...

  • 29.Python之面向对象的元类

    Python之面向对象的元类 什么是元类?类的类就是元类,元类创建对象。使用class定义的类,用来产生程序员自己...

  • Python中类、对象和继承相关知识

    定义类并创建对象 在Python中定义类的写法为:class 类名:即可定义出一个类(注意:类名首字母大写) 由类...

  • P 面向对象 | 类的结构

    一、类 类是一个特殊的对象(类对象)python中一切皆对象eg: 定义的类属于类对象 创建的实例属于实例对象 1...

  • Python 进阶篇之面向对象基础

    定义类并创建实例 在Python中,类通过 class 关键字定义。以 Person 为例,定义一个Person类...

  • Go语言面向对象

    面向对象 概念强调具备了功能的对象,关注的是解决问题需要哪些对象 如何创建一个对象? 定义一个类 通过定义的类创建...

  • python 元类学习笔记

    python中已一切皆对象,类实例化后就是对象。声明一个普通的类代码如下: python中创建类,是通过type方...

网友评论

      本文标题:学Python类的定义及通过类创建对象

      本文链接:https://www.haomeiwen.com/subject/lwgdpxtx.html